%PDF- %PDF-
Direktori : /proc/thread-self/root/backups/db_backups/mysql/db/havranipapuce/ |
Current File : //proc/thread-self/root/backups/db_backups/mysql/db/havranipapuce/text.sql |
/*M!999999\- enable the sandbox mode */ -- MariaDB dump 10.19 Distrib 10.6.22-MariaDB, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: havranipapuce -- ------------------------------------------------------ -- Server version 10.6.22-MariaDB-0ubuntu0.22.04.1 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `text` -- DROP TABLE IF EXISTS `text`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8mb4 */; CREATE TABLE `text` ( `old_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `old_text` mediumblob NOT NULL, `old_flags` tinyblob NOT NULL, PRIMARY KEY (`old_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1973 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci MAX_ROWS=10000000 AVG_ROW_LENGTH=10240; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `text` -- LOCK TABLES `text` WRITE; /*!40000 ALTER TABLE `text` DISABLE KEYS */; INSERT INTO `text` VALUES (1,'\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]','utf-8'),(2,'\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]','utf-8'),(3,'\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n\n\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]','utf-8'),(4,'Úplný název tématu: Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\nVatové podklady\n\nRasterizace\nje proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\nprobíhá automaticky se snahou o maximální rychlost.\nje vždy bez problému řešitelná (na rozdíl od Vektorizace).\nje velmi často opakovaná operace -> důraz na rychlost provedení.\nje realizována grafickou kartou.\n\nDefinice ze slidů\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\nÚsečka\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\nÚsečku můžeme zapsat následujícími matematickými zápisy:\nObecná rovnice úsečky\nAx + By + C = 0, A = (y1 - y2), B = (x2 - x1), kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\nParametrické vyjádření\nx = x1 + t*(x2 - x1), y = y1 + t*(y2 - y1), t je z intervalu <0,1>\nSměrnicový tvar\ny = k*x + q, k = (y2 - y1)/(x2 - x1)\n\nAlgoritmy\nÚsečka\nAlgoritmy tak jak jsou popsány platí pouze (AND):\nv prvním kvadrantu\npokud je úsečka rostoucí od počátečního bodu ke koncovému\nnejrychteji stoupá ve směru osy x\n\nŘešení:\nneroste správně - prohození souřadnic\nšpatný kvadrant - přidání mínus k jedné souřadnici\n\nDDA = Digital Differential Analyser\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n1. přičtení kroku na ose X: dx = 1px\n2. přičtení kroku na ose Y: velikost směrnice\n3. Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\nxn+1 = xn + dx, dx = 1\nyn+1 = yn + dy, dy = k = (y2-y1) / (x2-x1)\n\n\nKód:\n<nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\nModifikace Error control DDA\nRozdíl:\nNa ose X stejné jako bez modifikace\nY zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n1. Na začátku je chyba nulová.\n2. K chybě se přičte směrnice.\n3. Kontrola jestli je chyba větší než 0,5.\n4. Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\nLineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}\n\nBresenhamův algoritmus\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n1. přičtení kroku na ose X: dx = 1px\n2. posun na ose Y: podle znaménka prediktoru\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselne operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka','utf-8'),(5,'\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n\n\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\nJo a tady mate motivaci, damy:\n\nhttps://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQG8DMixC4pMPCv-g9ScZX1076ybIB9GGT7tIMH0VEAj8dBo61-\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n27 Vyhledávání a řazení - IAL \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA \n\n39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]','utf-8'),(6,'\n== 27 Vyhledávání a řazení ==','utf-8'),(7,'\nzatim to tu neniiiiii','utf-8'),(8,'\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n\n\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\nJo a tady mate motivaci, damy:\n\nhttps://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQG8DMixC4pMPCv-g9ScZX1076ybIB9GGT7tIMH0VEAj8dBo61-\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA \n\n39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]','utf-8'),(9,'\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n\n\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\nJo a tady mate motivaci, damy:\n\nhttps://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQG8DMixC4pMPCv-g9ScZX1076ybIB9GGT7tIMH0VEAj8dBo61-\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA \n\n39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]','utf-8'),(10,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA \n\n39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(11,'Úplný název tématu: Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\nVatové podklady\n\n== Rasterizace ==\n* je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n* probíhá automaticky se snahou o maximální rychlost.\n* je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n* je velmi často opakovaná operace -> důraz na rychlost provedení.\n* je realizována grafickou kartou.\n\n==== Definice ze slidů ====\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0</m>\n\n<m>A = (y_1 - y_2)</m>\n\n<m>B = (x_2 - x_1)</m>\n\nkdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Algoritmy===\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselne operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka','utf-8'),(12,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA \n\n[[39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA]] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(13,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA \n\n39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA\n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(14,'\n== TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) ==\n\nModel ISO/OSI:','utf-8'),(15,'\nModel ISO/OSI:','utf-8'),(16,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA] \n\n39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA\n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(17,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(18,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\nVatové podklady\n\n== Rasterizace ==\n* je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n* probíhá automaticky se snahou o maximální rychlost.\n* je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n* je velmi často opakovaná operace -> důraz na rychlost provedení.\n* je realizována grafickou kartou.\n\n==== Definice ze slidů ====\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0</m>\n\n<m>A = (y_1 - y_2)</m>\n\n<m>B = (x_2 - x_1)</m>\n\nkdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Algoritmy===\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselne operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka','utf-8'),(19,'Obsah:\nvytváří se automaticky z nadpisů.\n\nNadpisy:\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\nKódy:\nse vkládají do pole nowiki (párový html tag) preskrtnute W v kolečku\n\nMatematika:\nUvozovat do pole m (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko.\nHorní index (mocnina) za stříšku.\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\nOdrážky:\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(20,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) preskrtnute W v kolečku\n\n=====Matematika:=====\nUvozovat do pole m (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko.\nHorní index (mocnina) za stříšku.\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(21,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) preskrtnute W v kolečku\n\n----\n\n=====Matematika:=====\nUvozovat do pole m (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko.\nHorní index (mocnina) za stříšku.\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(22,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n=====Matematika:=====\nUvozovat do pole m (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko.\nHorní index (mocnina) za stříšku.\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(23,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(24,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(25,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(26,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(27,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek. Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(28,'=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(29,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(30,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\nFormátování:\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(31,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG \n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(32,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 39\n\n\'\'\'Hotovo\'\'\':\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O \n\n\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(33,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy vem.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(34,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy vem.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(35,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy vem.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(36,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy vem.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(37,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(38,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(39,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(40,'\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(41,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(42,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(43,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\nVatové podklady\n\n== Rasterizace ==\n* je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n* probíhá automaticky se snahou o maximální rychlost.\n* je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n* je velmi často opakovaná operace -> důraz na rychlost provedení.\n* je realizována grafickou kartou.\n\n==== Definice ze slidů ====\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0</m>\n\n<m>A = (y_1 - y_2)</m>\n\n<m>B = (x_2 - x_1)</m>\n\nkdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Algoritmy===\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\nKružnice\n\nNaivní algoritmus\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\nMidppoint pro kružnici\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n\nElipsa\n\nMidppoint pro elipsu\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\nElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}','utf-8'),(44,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\nVatové podklady\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n==== Definice ze slidů ====\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0</m>\n\n<m>A = (y_1 - y_2)</m>\n\n<m>B = (x_2 - x_1)</m>\n\nkdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Algoritmy===\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\nKružnice\n\nNaivní algoritmus\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\nMidppoint pro kružnici\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n\nElipsa\n\nMidppoint pro elipsu\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\nElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}','utf-8'),(45,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0</m>\n\n<m>A = (y_1 - y_2)</m>\n\n<m>B = (x_2 - x_1)</m>\n\nkdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Algoritmy===\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\nKružnice\n\nNaivní algoritmus\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\nMidppoint pro kružnici\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n\nElipsa\n\nMidppoint pro elipsu\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\nElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}','utf-8'),(46,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n==Algoritmy==\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\nKružnice\n\nNaivní algoritmus\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\nMidppoint pro kružnici\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n\nElipsa\n\nMidppoint pro elipsu\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\nElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}','utf-8'),(47,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n==Algoritmy==\n====Úsečka====\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n====Kružnice====\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n\n====Elipsa====\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(48,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(49,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n=====Řešení:=====\n* neroste správně - prohození souřadnic\n* špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(50,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\nVykreslení kružnice jako N-úhelník – varianta DDA\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(51,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t * (x_2 - x_1)</m>\n\n<m>y = y_1 + t * (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = k * x + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(52,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(53,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, A = (y_1 - y_2), B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(54,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(55,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(56,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(57,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(58,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(59,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 – a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(60,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + d_x, d_x = 1</m>\n\n<m>y_n+1 = y_n + d_y, d_y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(61,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + deltax, deltax = 1</m>\n\n<m>y_n+1 = y_n + deltay, deltay = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(62,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_n+1 = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(63,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag).\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nPokud chcu do indexu dát delší výraz uzavřu ho do složených závorek <nowiki>x_{n+m+1}</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(64,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než 0,5.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\ndouble k = (y2-y1) / (x2-x1);\ndouble E = 0;\nint y = y1;\n\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nE += k;\n\nif (E >= 0.5) { y++; E -= 1; }\n}\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(65,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravena\n2* delta x * Ei + 2 * delta y < delta x \n\nPrevedeno na nerovnost nuly\n2* delta x * Ei + 2 * delta y - delta x < 0\n\nCO je vlastne ten prediktor?\nCela tahle nerovnice je preditktor.\nPocatecni rpediktor je 2 * delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\nint dx = x2-x1, dy = y2-y1;\nint P = 2*dy – dx;\nint P1 = 2*dy, P2 = P1 - 2*dx;\nint y = y1;\nfor (int x = x1; x <= x2; x++)\n{\ndraw_pixel( x, y);\nif (P >= 0)\n{ P += P2; y++; }\nelse\nP += P1;\n}\n}\n\n\n\n----\n\n\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(66,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravená\n2 delta x E_i + 2 delta y < delta x \n\nPřevedeno na nerovnost nuly\n2 delta x E_i + 2 delta y - delta x < 0\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPocatecni prediktor je 2 delta y – delta x\n\nKód:\nLineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}\n\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(67,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravená\n2 delta x E_i + 2 delta y < delta x \n\nPřevedeno na nerovnost nuly\n2 delta x E_i + 2 delta y - delta x < 0\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPocatecni prediktor je 2 delta y – delta x\n\nKód:\n<nowiki>\nLineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}\n</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(68,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravená\n2 delta x E_i + 2 delta y < delta x \n\nPřevedeno na nerovnost nuly\n2 delta x E_i + 2 delta y - delta x < 0\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPocatecni prediktor je 2 delta y – delta x\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(69,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravená\n2 delta x E_i + 2 delta y < delta x \n\nPřevedeno na nerovnost nuly\n2 delta x E_i + 2 delta y - delta x < 0\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPocatecni prediktor je 2 delta y – delta x\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(70,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n\nUpravená\n2 delta x E_i + 2 delta y < delta x \n\nPřevedeno na nerovnost nuly\n2 delta x E_i + 2 delta y - delta x < 0\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(71,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n<m>\nEi + delta x / delta y < 5\nEi + delta x / delta y >= 5\n</m>\nUpravená\n<m>\n2 delta x E_i + 2 delta y < delta x \n</>\nPřevedeno na nerovnost nuly\n<m>\n2 delta x E_i + 2 delta y - delta x < 0\n</m>\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(72,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n<m>Ei + delta x / delta y < 5</m>\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(73,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\nCircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}\n\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(74,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\nPrincip:\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(75,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n1. x bod po bodu\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(76,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, \n\nA = (y_1 - y_2), \n\nB = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n\n\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(77,'','utf-8'),(78,'','utf-8'),(79,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url','utf-8'),(80,'','utf-8'),(81,'','utf-8'),(82,'','utf-8'),(83,'','utf-8'),(84,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url\n\n----\n\n==IP adresy==\n# IP adresy jsou centrálně spravovány organizací IANA\n# IP adresy rozdělují regionální registrátoři (RIR), rozděleni do několika regionů, Evropa má RIPE NCC\n# IP adresy mohou být:\n## statické – přiděleny napevno\n## dynamické – přiděleny jen po dobu komunikace\n### Pro dynamické přidělování IPv4 adres se používá systém DHCP\n\n======DHCP======\n# DHCP Discover – počítač přijde so sítě a nemá IP adresu. Tak zařve na broadcast (port 67), zda tan není DHCP server\n# DHCP Offer – odpověd DHCP serveru, nabídne IP adresu\n# DHCP ACK – potvrzuje přijetí volby a přidělení IP adresy na určitou dobu (lease)\n# DHCP Release – uvolnění IP adresy\n\n====Schémata IP adresování====\n# Rozdělení IP adres do tříd\n# Vytváření podsítí (subnetting)\n# Beztřídní adresování (pomocí masky, bez tříd)\n# Překlad adres NAT\n# Adresování IPv6\n\n----\n\n=====Rozdělení IP adres do tříd=====\n[[Soubor:tridni_adr.png]]\n# Prefix sítě označuje počet jedičkových bitů v masce sítě\n# Nejnižší adresa v síti slouží pro označení celé sítě\n# Nejvyšší adresa v síti slouží pro broadcast\n# Adresa 127.0.0.0 je určena pro loopback (localhost), logická smyčka umožňující posílat pakety sám sobě\n# Interní IP adresy:\n## slouží pro adresování vnitřních sítí, na internetu se nikdy nemohou objevit\n## ve třídě A: 10.0.0.0 – 10.255.255.255\n## ve třídě B: 172.16.0.0 – 172.31.255.255\n## ve třídě C: 192.168.0.0 – 192.168.255.255\n\n\n# I když jsou ve třídním adresování prefixy dlouhé 8,16 a 24 bitů počet sítí je pouze 2^7 – 2, 2^14 – 2 a 2^21 – 2. Zdánlivě se nám ztratily 1, 2 a 3 bity v adresách typu A, B a C. Jenže tyhle bity jsou již vyhrazeny jakožto “určující začátek”, jinými slovy, určují rozsah konkrétní třídy. Ve třídě A je vyhrazen první bit, který je nulový, tudíž rozsah může být jen 0 – 127. V adrese B se jedná již o dva bity a adrese typu C až tři.\n\n----\n\n=====Vytváření podsítí (subnetting)=====\n# Cílem efektivní využití adresového prostoru\n# Na rozdíl od předchozího schématu, kdy maska sítě závisí na třídě adresy, je možné rozdělit část adresy určenou pro počítače ještě na adresu podsítě a adresu počítače libovolně podle aktuálních potrěb\n[[Soubor:Subnetting.png]]\n\'\'\'Výhody:\'\'\'\n\n# logické či geografické dělení sítí (např. jednotlivá oddělení firmy mají vlastní podsíť)\n# snížení zátěže na síti – omezení vysílání typu broadcast (např. ARP dotazy)\n# bezpečnost při oddělení podsítí\n# jednodušší administrace\n[[Soubor:Podsite.png]]\n# V tomto případě pořebujeme 3 podsítě, tudíž nám pro SubnetID stačí dva bity (možné 4 podsítě)\n\n----\n\n=====Beztřídní adresování=====\n\n# Snaha o efektivní využití adresového prostoru\n# Síťová část IP adresy může mít libovolný počet bitů\n# Formát beztřídní adresy je w.x.y.z/n, kde n udává počet bitů síťové části IP adresy\n# Pokud firma požaduje blok adres pro 1000 počítačů, bude mít adresu w.x.y.z/22. Posledními 10ti bity totiž můžeme adresovat 1024 počítačů, čímž se efektivně využije adresový prostor\n# V případě tŕídního adresování by organizace dostala adresu typu B, kde je možné mít přes 65 tis. adres, což je příliš\n\n\'\'\'Prefix\'\'\' – číslo, které udává počet bitů síťové části IP adresy\n\'\'\'Maska\'\'\' – odvozuje se z prefixu. Má formát IP adresy, její konktrétní hodnotou jsou všechny jedničkové bity prefixu a zbytek nulový.\n\'\'\'Příklad:\'\'\'\n\n Prefix - /8 --> bitový zápis prefixu - 11111111 00000000 00000000 00000000 --> maska: 255.0.0.0\n Prefix - /11 --> bitový zápis prefixu - 11111111 11100000 00000000 00000000 –-> maska: 255.224.0.0\n\n======Výpočet počtů sítí a počítačů v síti======\n\'\'\'Počet sítí:\'\'\' 2^(počet bitů prefixu) – 2\n# V třídním adresování se na základě třídy 1-3 bity z prefixu odeberou\n\n\'\'\'Počet stanic:\'\'\' 2^(počet zbývajících bitů) – 2\n# 2 se odečítá proto, že nejvyšší adresa v síti slouží pro broadcast a nejnižší pro označení celé sítě\n\n----\n\n=====Překlad adres (NAT)=====\n\n# Způsob mapování a překladu IP adres z jedné skupiny IP adres na druhou\n# Překlad adres může být: 1:1, M:N, N:1 (PAT)\n## M:N - M adres vnitřní sítě se mapuje na N adres vnější sítě, obvykle M <= N\n\n\'\'\'Výhody:\'\'\'\n\n# Šetření IP adres (Mnoho spojení v rámci organizace požaduje pouze interní komunikaci. Pouze malá část počítačů se v určitý okamžik připojí na internet)\n# Redukuje útoky typu „spoofing“, kdy se útočníkův počítač tváří jako lokální. (Nat používá pro vnitřní systém privátní IP adresy, které se nepoužívají v Internetu. Pokud se tam vyskytnou, směřovač je zahodí)\n# Odstraňuje potřebu změnit IP adresy počítačů, když dojde ke změně ISP\n\n\'\'\'Nevýhody:\'\'\'\n\n# NAT vyžaduje nároky na hardware či software při překladu adres a udržování překladové tabulky\n# Stanice, které jsou umístěny ve vnitřní síti, nelze v případě PAT adresovat\n# PAT používá čísla portů pro adresování počítačů, nikoli procesů, což je původní význam čísel portů\n# NAT omezuje použití kryptování a autentizace. Autentizace, která zaočítává původní IP hlavičku do kontrolního součtu, nebude pracovat korektně s prekladem PAT\n# Neustálé používání NAT brzdí rozšiřování protokolu IPv6\n\n----\n\n=====IPv6=====\n\n# IPv6 adresa má 128 bitů\n# Preferovný zápis je ve formátu X:X:X:X:X:X:X:X, kde X je hexadecimální zápis 16ti-bitového čísla (dohromady 8 čísel)\n# Zápis adresy lze skrátit použitím následujících pravidel:\n## Nuly na začátku každého 16ti bitového čísla lze vynechat\n## Blok samých nul lze nahradit jedinou nulou\n## Libovolný počet nulových bloků lze nejvýše jednou nahradit znakem „::“\n# Alternativní zápis IPv6 adresy může mít tvar X:X:X:X:X:X:D.D.D.D, kde pro X platí stejná pravidla jaké předtím a D je desítkový zápis 8mi bitového čísla (shodné s formátem IPv4)\n\'\'\'Příklady platných IPv6 adres:\'\'\'\n 1080:0000:0000:0000:0008:0800:200C:417A\n 1080:0:0:0:8:800:200C:417A\n 1080::8:800:200C:417A\n 1080::8:800:32.12.65.122\n\'\'\'Rozdělení adres:\'\'\'\n# IPv6 ruší broadcast adresy a k existujícím unicast a multicast zavádí nový typ anycast\n# Anycast se chová stejně jako unicast, s tím, že může být přiřazená více uzlům. Klient pak komunikuje s tím uzlem, který odpověděl jako první\n# Další možnost je rodělit adresy podle rozsahu:\n## Adresy na lince (neprojdou za router)\n## Lokální adresy (ULA, nejsou směřovatelné ve veřejné síti)\n## Veřejné adresy\n[[Soubor:IPv6.png]]\n# Linkové adresy – nesmějí se směřovat a nelze je proto použít pro komunikaci v rozlehlejší síti. Obvykle se tato adresa generuje automaticky a používá se pro další komunikaci mezi nižšími službami\n# Lokální adresy (ULA)– Síťová část ULA adresy sestává z těchto částí:\n## Prefix – FC00::/7\n## L bit- 1 pokud byl prefix přiřazen lokálně, 0 zatím nebyla definována\n## Global ID – identifikátor sítě, měl by být unikátní\n## Subnet ID – identifikátor podsítě. ULA adresy umožňují až 65 536 podsítí\n## Interface ID – identifikátor rozhraní. Je několik variant jak ho získat\n\n----','utf-8'),(85,'','utf-8'),(86,'','utf-8'),(87,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url\n\n----\n\n==IP adresy==\n# IP adresy jsou centrálně spravovány organizací IANA\n# IP adresy rozdělují regionální registrátoři (RIR), rozděleni do několika regionů, Evropa má RIPE NCC\n# IP adresy mohou být:\n## statické – přiděleny napevno\n## dynamické – přiděleny jen po dobu komunikace\n### Pro dynamické přidělování IPv4 adres se používá systém DHCP\n\n======IPv4======\n# Čtvrtá verze protkolu IP, ale první, která se masivně rozšířila\n# IPv4 adresa sestává z 32 bitů, které jsou zapsáne dekadicky po jednotlivých bajtech oddělených tečkou\n# 3. února 2011 byli rozděleny poslední bloky adres IPv4, čímž došlo k jejich vyčerpání\n======DHCP======\n# DHCP Discover – počítač přijde so sítě a nemá IP adresu. Tak zařve na broadcast (port 67), zda tan není DHCP server\n# DHCP Offer – odpověd DHCP serveru, nabídne IP adresu\n# DHCP ACK – potvrzuje přijetí volby a přidělení IP adresy na určitou dobu (lease)\n# DHCP Release – uvolnění IP adresy\n\n====Schémata IP adresování====\n# Rozdělení IP adres do tříd\n# Vytváření podsítí (subnetting)\n# Beztřídní adresování (pomocí masky, bez tříd)\n# Překlad adres NAT\n# Adresování IPv6\n\n----\n\n=====Rozdělení IP adres do tříd=====\n[[Soubor:tridni_adr.png]]\n# Prefix sítě označuje počet jedičkových bitů v masce sítě\n# Nejnižší adresa v síti slouží pro označení celé sítě\n# Nejvyšší adresa v síti slouží pro broadcast\n# Adresa 127.0.0.0 je určena pro loopback (localhost), logická smyčka umožňující posílat pakety sám sobě\n# Interní IP adresy:\n## slouží pro adresování vnitřních sítí, na internetu se nikdy nemohou objevit\n## ve třídě A: 10.0.0.0 – 10.255.255.255\n## ve třídě B: 172.16.0.0 – 172.31.255.255\n## ve třídě C: 192.168.0.0 – 192.168.255.255\n\n\n# I když jsou ve třídním adresování prefixy dlouhé 8,16 a 24 bitů počet sítí je pouze 2^7 – 2, 2^14 – 2 a 2^21 – 2. Zdánlivě se nám ztratily 1, 2 a 3 bity v adresách typu A, B a C. Jenže tyhle bity jsou již vyhrazeny jakožto “určující začátek”, jinými slovy, určují rozsah konkrétní třídy. Ve třídě A je vyhrazen první bit, který je nulový, tudíž rozsah může být jen 0 – 127. V adrese B se jedná již o dva bity a adrese typu C až tři.\n\n----\n\n=====Vytváření podsítí (subnetting)=====\n# Cílem efektivní využití adresového prostoru\n# Na rozdíl od předchozího schématu, kdy maska sítě závisí na třídě adresy, je možné rozdělit část adresy určenou pro počítače ještě na adresu podsítě a adresu počítače libovolně podle aktuálních potrěb\n[[Soubor:Subnetting.png]]\n\n\'\'\'Výhody:\'\'\'\n\n# logické či geografické dělení sítí (např. jednotlivá oddělení firmy mají vlastní podsíť)\n# snížení zátěže na síti – omezení vysílání typu broadcast (např. ARP dotazy)\n# bezpečnost při oddělení podsítí\n# jednodušší administrace\n[[Soubor:Podsite.png]]\n# V tomto případě pořebujeme 3 podsítě, tudíž nám pro SubnetID stačí dva bity (možné 4 podsítě)\n\n----\n\n=====Beztřídní adresování=====\n\n# Snaha o efektivní využití adresového prostoru\n# Síťová část IP adresy může mít libovolný počet bitů\n# Formát beztřídní adresy je w.x.y.z/n, kde n udává počet bitů síťové části IP adresy\n# Pokud firma požaduje blok adres pro 1000 počítačů, bude mít adresu w.x.y.z/22. Posledními 10ti bity totiž můžeme adresovat 1024 počítačů, čímž se efektivně využije adresový prostor\n# V případě tŕídního adresování by organizace dostala adresu typu B, kde je možné mít přes 65 tis. adres, což je příliš\n\n\'\'\'Prefix\'\'\' – číslo, které udává počet bitů síťové části IP adresy\n\'\'\'Maska\'\'\' – odvozuje se z prefixu. Má formát IP adresy, její konktrétní hodnotou jsou všechny jedničkové bity prefixu a zbytek nulový.\n\'\'\'Příklad:\'\'\'\n\n Prefix - /8 --> bitový zápis prefixu - 11111111 00000000 00000000 00000000 --> maska: 255.0.0.0\n Prefix - /11 --> bitový zápis prefixu - 11111111 11100000 00000000 00000000 –-> maska: 255.224.0.0\n\n======Výpočet počtů sítí a počítačů v síti======\n\'\'\'Počet sítí:\'\'\' 2^(počet bitů prefixu) – 2\n# V třídním adresování se na základě třídy 1-3 bity z prefixu odeberou\n\n\'\'\'Počet stanic:\'\'\' 2^(počet zbývajících bitů) – 2\n# 2 se odečítá proto, že nejvyšší adresa v síti slouží pro broadcast a nejnižší pro označení celé sítě\n\n----\n\n=====Překlad adres (NAT)=====\n\n# Způsob mapování a překladu IP adres z jedné skupiny IP adres na druhou\n# Překlad adres může být: 1:1, M:N, N:1 (PAT)\n## M:N - M adres vnitřní sítě se mapuje na N adres vnější sítě, obvykle M <= N\n\n\'\'\'Výhody:\'\'\'\n\n# Šetření IP adres (Mnoho spojení v rámci organizace požaduje pouze interní komunikaci. Pouze malá část počítačů se v určitý okamžik připojí na internet)\n# Redukuje útoky typu „spoofing“, kdy se útočníkův počítač tváří jako lokální. (Nat používá pro vnitřní systém privátní IP adresy, které se nepoužívají v Internetu. Pokud se tam vyskytnou, směřovač je zahodí)\n# Odstraňuje potřebu změnit IP adresy počítačů, když dojde ke změně ISP\n\n\'\'\'Nevýhody:\'\'\'\n\n# NAT vyžaduje nároky na hardware či software při překladu adres a udržování překladové tabulky\n# Stanice, které jsou umístěny ve vnitřní síti, nelze v případě PAT adresovat\n# PAT používá čísla portů pro adresování počítačů, nikoli procesů, což je původní význam čísel portů\n# NAT omezuje použití kryptování a autentizace. Autentizace, která zaočítává původní IP hlavičku do kontrolního součtu, nebude pracovat korektně s prekladem PAT\n# Neustálé používání NAT brzdí rozšiřování protokolu IPv6\n\n----\n\n=====IPv6=====\n\n# IPv6 adresa má 128 bitů\n# Preferovný zápis je ve formátu X:X:X:X:X:X:X:X, kde X je hexadecimální zápis 16ti-bitového čísla (dohromady 8 čísel)\n# Zápis adresy lze skrátit použitím následujících pravidel:\n## Nuly na začátku každého 16ti bitového čísla lze vynechat\n## Blok samých nul lze nahradit jedinou nulou\n## Libovolný počet nulových bloků lze nejvýše jednou nahradit znakem „::“\n# Alternativní zápis IPv6 adresy může mít tvar X:X:X:X:X:X:D.D.D.D, kde pro X platí stejná pravidla jaké předtím a D je desítkový zápis 8mi bitového čísla (shodné s formátem IPv4)\n\'\'\'Příklady platných IPv6 adres:\'\'\'\n 1080:0000:0000:0000:0008:0800:200C:417A\n 1080:0:0:0:8:800:200C:417A\n 1080::8:800:200C:417A\n 1080::8:800:32.12.65.122\n\'\'\'Rozdělení adres:\'\'\'\n# IPv6 ruší broadcast adresy a k existujícím unicast a multicast zavádí nový typ anycast\n# Anycast se chová stejně jako unicast, s tím, že může být přiřazená více uzlům. Klient pak komunikuje s tím uzlem, který odpověděl jako první\n# Další možnost je rodělit adresy podle rozsahu:\n## Adresy na lince (neprojdou za router)\n## Lokální adresy (ULA, nejsou směřovatelné ve veřejné síti)\n## Veřejné adresy\n[[Soubor:IPv6.png]]\n# Linkové adresy – nesmějí se směřovat a nelze je proto použít pro komunikaci v rozlehlejší síti. Obvykle se tato adresa generuje automaticky a používá se pro další komunikaci mezi nižšími službami\n# Lokální adresy (ULA)– Síťová část ULA adresy sestává z těchto částí:\n## Prefix – FC00::/7\n## L bit- 1 pokud byl prefix přiřazen lokálně, 0 zatím nebyla definována\n## Global ID – identifikátor sítě, měl by být unikátní\n## Subnet ID – identifikátor podsítě. ULA adresy umožňují až 65 536 podsítí\n## Interface ID – identifikátor rozhraní. Je několik variant jak ho získat\n\n----\n\n==UDP==\n# User Datagram Protocol\n# Jednoduchý protokol transportní vrstvy orientovaný na zprávy\n# Neposkytuje žádné záruky doručení a odesilatelova UDP vrstva si u jednou už odeslaných zpráv neudržuje žádný stav\n# Postrádá mechanismus předcházení a regulace zahlcení sítě, je nutné nadbytečné UDP datagramy na routerech zahazovat\n# Důraz na rychlost doručení -> vhodné např. u VoIP a multimédií\n# Nevytváří spojení (data se odesílají na server pomocí sendto() a přijímají pomocí recvfrom())\n# Je používán DNS, DHCP, SNMP\n\n==TCP==\n# Transmission Control Protocol\n# Vytváří spojení -> point-to-point (jeden odesílatel, jeden příjemce)\n# Spolehlivé doručování, ve správném pořadí\n# \'\'\'Three Way Handshake:\'\'\'\n## klient -> server – datagram s příznakem SYN číslem sekvence x, potvrzovací číslo 0\n## server -> klient – datagram s příznakem SYN a ACK, číslo sekvence y, potvrzovací x+1\n## klient -> server – datagram s příznakem ACK, císlo sekvence x+1, potvrzovací y+1\n[[Soubor:3way_hanshake.png]]\n# \'\'\'Ukončení spojení\'\'\':\n## klient -> server – datagram s příznakem FIN\n## server -> klient – odpoví datagramem s příznakem ACK\n## server -> klient – odešle datagram s příznakem FIN\n## klient -> server – odpoví s nastaveným příznakem ACK\n[[Soubor:TCP_end.png]]\n\n----\n\n==Model klient-server==','utf-8'),(88,'','utf-8'),(89,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url\n\n----\n\n==IP adresy==\n# IP adresy jsou centrálně spravovány organizací IANA\n# IP adresy rozdělují regionální registrátoři (RIR), rozděleni do několika regionů, Evropa má RIPE NCC\n# IP adresy mohou být:\n## statické – přiděleny napevno\n## dynamické – přiděleny jen po dobu komunikace\n### Pro dynamické přidělování IPv4 adres se používá systém DHCP\n\n======IPv4======\n# Čtvrtá verze protkolu IP, ale první, která se masivně rozšířila\n# IPv4 adresa sestává z 32 bitů, které jsou zapsáne dekadicky po jednotlivých bajtech oddělených tečkou\n# 3. února 2011 byli rozděleny poslední bloky adres IPv4, čímž došlo k jejich vyčerpání\n======DHCP======\n# DHCP Discover – počítač přijde so sítě a nemá IP adresu. Tak zařve na broadcast (port 67), zda tan není DHCP server\n# DHCP Offer – odpověd DHCP serveru, nabídne IP adresu\n# DHCP ACK – potvrzuje přijetí volby a přidělení IP adresy na určitou dobu (lease)\n# DHCP Release – uvolnění IP adresy\n\n====Schémata IP adresování====\n# Rozdělení IP adres do tříd\n# Vytváření podsítí (subnetting)\n# Beztřídní adresování (pomocí masky, bez tříd)\n# Překlad adres NAT\n# Adresování IPv6\n\n----\n\n=====Rozdělení IP adres do tříd=====\n[[Soubor:tridni_adr.png]]\n# Prefix sítě označuje počet jedičkových bitů v masce sítě\n# Nejnižší adresa v síti slouží pro označení celé sítě\n# Nejvyšší adresa v síti slouží pro broadcast\n# Adresa 127.0.0.0 je určena pro loopback (localhost), logická smyčka umožňující posílat pakety sám sobě\n# Interní IP adresy:\n## slouží pro adresování vnitřních sítí, na internetu se nikdy nemohou objevit\n## ve třídě A: 10.0.0.0 – 10.255.255.255\n## ve třídě B: 172.16.0.0 – 172.31.255.255\n## ve třídě C: 192.168.0.0 – 192.168.255.255\n\n\n# I když jsou ve třídním adresování prefixy dlouhé 8,16 a 24 bitů počet sítí je pouze 2^7 – 2, 2^14 – 2 a 2^21 – 2. Zdánlivě se nám ztratily 1, 2 a 3 bity v adresách typu A, B a C. Jenže tyhle bity jsou již vyhrazeny jakožto “určující začátek”, jinými slovy, určují rozsah konkrétní třídy. Ve třídě A je vyhrazen první bit, který je nulový, tudíž rozsah může být jen 0 – 127. V adrese B se jedná již o dva bity a adrese typu C až tři.\n\n----\n\n=====Vytváření podsítí (subnetting)=====\n# Cílem efektivní využití adresového prostoru\n# Na rozdíl od předchozího schématu, kdy maska sítě závisí na třídě adresy, je možné rozdělit část adresy určenou pro počítače ještě na adresu podsítě a adresu počítače libovolně podle aktuálních potrěb\n[[Soubor:Subnetting.png]]\n\n\'\'\'Výhody:\'\'\'\n\n# logické či geografické dělení sítí (např. jednotlivá oddělení firmy mají vlastní podsíť)\n# snížení zátěže na síti – omezení vysílání typu broadcast (např. ARP dotazy)\n# bezpečnost při oddělení podsítí\n# jednodušší administrace\n[[Soubor:Podsite.png]]\n# V tomto případě pořebujeme 3 podsítě, tudíž nám pro SubnetID stačí dva bity (možné 4 podsítě)\n\n----\n\n=====Beztřídní adresování=====\n\n# Snaha o efektivní využití adresového prostoru\n# Síťová část IP adresy může mít libovolný počet bitů\n# Formát beztřídní adresy je w.x.y.z/n, kde n udává počet bitů síťové části IP adresy\n# Pokud firma požaduje blok adres pro 1000 počítačů, bude mít adresu w.x.y.z/22. Posledními 10ti bity totiž můžeme adresovat 1024 počítačů, čímž se efektivně využije adresový prostor\n# V případě tŕídního adresování by organizace dostala adresu typu B, kde je možné mít přes 65 tis. adres, což je příliš\n\n\'\'\'Prefix\'\'\' – číslo, které udává počet bitů síťové části IP adresy\n\'\'\'Maska\'\'\' – odvozuje se z prefixu. Má formát IP adresy, její konktrétní hodnotou jsou všechny jedničkové bity prefixu a zbytek nulový.\n\'\'\'Příklad:\'\'\'\n\n Prefix - /8 --> bitový zápis prefixu - 11111111 00000000 00000000 00000000 --> maska: 255.0.0.0\n Prefix - /11 --> bitový zápis prefixu - 11111111 11100000 00000000 00000000 –-> maska: 255.224.0.0\n\n======Výpočet počtů sítí a počítačů v síti======\n\'\'\'Počet sítí:\'\'\' 2^(počet bitů prefixu) – 2\n# V třídním adresování se na základě třídy 1-3 bity z prefixu odeberou\n\n\'\'\'Počet stanic:\'\'\' 2^(počet zbývajících bitů) – 2\n# 2 se odečítá proto, že nejvyšší adresa v síti slouží pro broadcast a nejnižší pro označení celé sítě\n\n----\n\n=====Překlad adres (NAT)=====\n\n# Způsob mapování a překladu IP adres z jedné skupiny IP adres na druhou\n# Překlad adres může být: 1:1, M:N, N:1 (PAT)\n## M:N - M adres vnitřní sítě se mapuje na N adres vnější sítě, obvykle M <= N\n\n\'\'\'Výhody:\'\'\'\n\n# Šetření IP adres (Mnoho spojení v rámci organizace požaduje pouze interní komunikaci. Pouze malá část počítačů se v určitý okamžik připojí na internet)\n# Redukuje útoky typu „spoofing“, kdy se útočníkův počítač tváří jako lokální. (Nat používá pro vnitřní systém privátní IP adresy, které se nepoužívají v Internetu. Pokud se tam vyskytnou, směřovač je zahodí)\n# Odstraňuje potřebu změnit IP adresy počítačů, když dojde ke změně ISP\n\n\'\'\'Nevýhody:\'\'\'\n\n# NAT vyžaduje nároky na hardware či software při překladu adres a udržování překladové tabulky\n# Stanice, které jsou umístěny ve vnitřní síti, nelze v případě PAT adresovat\n# PAT používá čísla portů pro adresování počítačů, nikoli procesů, což je původní význam čísel portů\n# NAT omezuje použití kryptování a autentizace. Autentizace, která zaočítává původní IP hlavičku do kontrolního součtu, nebude pracovat korektně s prekladem PAT\n# Neustálé používání NAT brzdí rozšiřování protokolu IPv6\n\n----\n\n=====IPv6=====\n\n# IPv6 adresa má 128 bitů\n# Preferovný zápis je ve formátu X:X:X:X:X:X:X:X, kde X je hexadecimální zápis 16ti-bitového čísla (dohromady 8 čísel)\n# Zápis adresy lze skrátit použitím následujících pravidel:\n## Nuly na začátku každého 16ti bitového čísla lze vynechat\n## Blok samých nul lze nahradit jedinou nulou\n## Libovolný počet nulových bloků lze nejvýše jednou nahradit znakem „::“\n# Alternativní zápis IPv6 adresy může mít tvar X:X:X:X:X:X:D.D.D.D, kde pro X platí stejná pravidla jaké předtím a D je desítkový zápis 8mi bitového čísla (shodné s formátem IPv4)\n\'\'\'Příklady platných IPv6 adres:\'\'\'\n 1080:0000:0000:0000:0008:0800:200C:417A\n 1080:0:0:0:8:800:200C:417A\n 1080::8:800:200C:417A\n 1080::8:800:32.12.65.122\n\'\'\'Rozdělení adres:\'\'\'\n# IPv6 ruší broadcast adresy a k existujícím unicast a multicast zavádí nový typ anycast\n# Anycast se chová stejně jako unicast, s tím, že může být přiřazená více uzlům. Klient pak komunikuje s tím uzlem, který odpověděl jako první\n# Další možnost je rodělit adresy podle rozsahu:\n## Adresy na lince (neprojdou za router)\n## Lokální adresy (ULA, nejsou směřovatelné ve veřejné síti)\n## Veřejné adresy\n[[Soubor:IPv6.png]]\n# Linkové adresy – nesmějí se směřovat a nelze je proto použít pro komunikaci v rozlehlejší síti. Obvykle se tato adresa generuje automaticky a používá se pro další komunikaci mezi nižšími službami\n# Lokální adresy (ULA)– Síťová část ULA adresy sestává z těchto částí:\n## Prefix – FC00::/7\n## L bit- 1 pokud byl prefix přiřazen lokálně, 0 zatím nebyla definována\n## Global ID – identifikátor sítě, měl by být unikátní\n## Subnet ID – identifikátor podsítě. ULA adresy umožňují až 65 536 podsítí\n## Interface ID – identifikátor rozhraní. Je několik variant jak ho získat\n\n----\n\n==UDP==\n# User Datagram Protocol\n# Jednoduchý protokol transportní vrstvy orientovaný na zprávy\n# Neposkytuje žádné záruky doručení a odesilatelova UDP vrstva si u jednou už odeslaných zpráv neudržuje žádný stav\n# Postrádá mechanismus předcházení a regulace zahlcení sítě, je nutné nadbytečné UDP datagramy na routerech zahazovat\n# Důraz na rychlost doručení -> vhodné např. u VoIP a multimédií\n# Nevytváří spojení (data se odesílají na server pomocí sendto() a přijímají pomocí recvfrom())\n# Je používán DNS, DHCP, SNMP\n\n==TCP==\n# Transmission Control Protocol\n# Vytváří spojení -> point-to-point (jeden odesílatel, jeden příjemce)\n# Spolehlivé doručování, ve správném pořadí\n# \'\'\'Three Way Handshake:\'\'\'\n## klient -> server – datagram s příznakem SYN číslem sekvence x, potvrzovací číslo 0\n## server -> klient – datagram s příznakem SYN a ACK, číslo sekvence y, potvrzovací x+1\n## klient -> server – datagram s příznakem ACK, císlo sekvence x+1, potvrzovací y+1\n[[Soubor:3way_hanshake.png]]\n# \'\'\'Ukončení spojení\'\'\':\n## klient -> server – datagram s příznakem FIN\n## server -> klient – odpoví datagramem s příznakem ACK\n## server -> klient – odešle datagram s příznakem FIN\n## klient -> server – odpoví s nastaveným příznakem ACK\n[[Soubor:TCP_end.png]]\n\n----\n\n==Model klient-server==\n# Standardní schéma komunikace mezi dvěma procesy\n\'\'\'Klient:\'\'\'\n# klient iniciuje spojení\n# klient zprávu přeloží do protokolu a odešle (nic nezpracovává, jen konvertuje do jiné syntaxe)\n# proměnná adresa\n# klienti nekomunikují mezi sebou\n\n\'\'\'Server:\'\'\'\n# čeká na požadavky, zpracuje je a odešle odpověď\n# pevná adresa\n# existují farmy serverů\n\n\'\'\'Protokol:\'\'\' soubor syntaktických a sémantických pravidel určujících výměnu informace nejméně mezi 2 entitami.\n# zahrnuje navázání spojení, adresování, přenos dat, zpracování chyb, řízení toku, přidělování prostředků\n\n====Konkurentní TCP server:====\n\n# Vytvořit scránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem - bind()\n# Přepni scránku do pasivního čekání – listen()\n# Přijmi nový požadavek a vytvoř spojení – accept()\n# Pro nové spojení vytvoř nový proces – fork()\n# Vyměňuj si zprávy s klientem – read(), write()\n# Uzavři schránku a ukonči proces – close(), exit()\n\n\n====Iterativní TCP server:====\n\n# To samé bez fork()\n\n\n====Iterativní UDP server:====\n\n# Server čeká na požadavek\n# Načte požadavek, zpracuje, odešle odpověď a čeká na další\n# Většina UDP serverů je iterativních\n\n====Konkurentní UDP server:====\n\n# Vytvoř schránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem – bind()\n# Vyčkej na požadavek klienta – recvfrom()\n# Přijmi požadavek, vytvoř nový proces – fork()\n# V novém procesu odešli odpověď – sendto()\n# Ukonči proces potomka – exit()\n\n\n====Programové prostředky pro komunikaci mezi procesy:====\n\n# Unixové roury (pipes)\n# UUCP komunikace (unix to unix copy) – z hlediska bezpečnosti se dnes moc nepoužívá\n# Volání vzdálených procedur RPC\n# BSD scránky (sockets)\n\n\n=====BSD schránky=====\n\n# Aplikační (programové) rozhraní pro komunikující procesy\n# Abstraktní datová struktura obsahující údaje pro komunikaci\n# Pracují na transportní úrovni (TCP, UDP)\n# Určeny pro vytváření uživatelských aplikací\n# Nezasahují do nižších vrstev\n\n\n======Schránky typu „raw“======\n\n# Komunikace s nízkoúrovňovými protokoly\n# Používají se při čtení komunikace IP, ICMP, IGMP\n# Uživatel musí znát podrobně strukturu IP, příp. ICMP\n# Pouze správce systému (root) má právo vytvořit schránku typu „raw“\n\n\n=====RPC – Remote Procedure Call=====\n\n# Pracuje nad transportí vrstvou, tzn. na relační vrstvě v modelu ISO/OSI a aplikační v modelu TCP/IP\n# Slouží k programování komunikace po síti (aplikace typu klient-server)\n# K adresování používá speciální číslo programu, v kt. je procedura implementovaná a má se spouštět, navíc se přidává verze\n[[Soubor:RPC.png]]\n\n\'\'\'Činnost RPC:\'\'\'\n\n1. Klient volá vzdálenou proceduru. Client stub zjistí vzdálený port\n\n2. Client stub zabalí parametry zo zprávy RPC a pošle\n\n3. Zpráva je přenesena pomocí zprávy RPC nad UDP po síti\n\n4. Knihovna RPC předá volání funkci server stub. Ta zavolá proceduru\n\n5. Výsledek pošle server stub zpět\n\n6. Client stub přijme odpověď, dekóduje výsledek a předá ho aplikaci','utf-8'),(90,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url\n\n----\n\n==IP adresy==\n# IP adresy jsou centrálně spravovány organizací IANA\n# IP adresy rozdělují regionální registrátoři (RIR), rozděleni do několika regionů, Evropa má RIPE NCC\n# IP adresy mohou být:\n## statické – přiděleny napevno\n## dynamické – přiděleny jen po dobu komunikace\n### Pro dynamické přidělování IPv4 adres se používá systém DHCP\n\n======IPv4======\n# Čtvrtá verze protkolu IP, ale první, která se masivně rozšířila\n# IPv4 adresa sestává z 32 bitů, které jsou zapsáne dekadicky po jednotlivých bajtech oddělených tečkou\n# 3. února 2011 byli rozděleny poslední bloky adres IPv4, čímž došlo k jejich vyčerpání\n======DHCP======\n# DHCP Discover – počítač přijde so sítě a nemá IP adresu. Tak zařve na broadcast (port 67), zda tan není DHCP server\n# DHCP Offer – odpověd DHCP serveru, nabídne IP adresu\n# DHCP ACK – potvrzuje přijetí volby a přidělení IP adresy na určitou dobu (lease)\n# DHCP Release – uvolnění IP adresy\n\n====Schémata IP adresování====\n# Rozdělení IP adres do tříd\n# Vytváření podsítí (subnetting)\n# Beztřídní adresování (pomocí masky, bez tříd)\n# Překlad adres NAT\n# Adresování IPv6\n\n----\n\n=====Rozdělení IP adres do tříd=====\n[[Soubor:tridni_adr.png]]\n# Prefix sítě označuje počet jedičkových bitů v masce sítě\n# Nejnižší adresa v síti slouží pro označení celé sítě\n# Nejvyšší adresa v síti slouží pro broadcast\n# Adresa 127.0.0.0 je určena pro loopback (localhost), logická smyčka umožňující posílat pakety sám sobě\n# Interní IP adresy:\n## slouží pro adresování vnitřních sítí, na internetu se nikdy nemohou objevit\n## ve třídě A: 10.0.0.0 – 10.255.255.255\n## ve třídě B: 172.16.0.0 – 172.31.255.255\n## ve třídě C: 192.168.0.0 – 192.168.255.255\n\n\n# I když jsou ve třídním adresování prefixy dlouhé 8,16 a 24 bitů počet sítí je pouze 2^7 – 2, 2^14 – 2 a 2^21 – 2. Zdánlivě se nám ztratily 1, 2 a 3 bity v adresách typu A, B a C. Jenže tyhle bity jsou již vyhrazeny jakožto “určující začátek”, jinými slovy, určují rozsah konkrétní třídy. Ve třídě A je vyhrazen první bit, který je nulový, tudíž rozsah může být jen 0 – 127. V adrese B se jedná již o dva bity a adrese typu C až tři.\n\n----\n\n=====Vytváření podsítí (subnetting)=====\n# Cílem efektivní využití adresového prostoru\n# Na rozdíl od předchozího schématu, kdy maska sítě závisí na třídě adresy, je možné rozdělit část adresy určenou pro počítače ještě na adresu podsítě a adresu počítače libovolně podle aktuálních potrěb\n[[Soubor:Subnetting.png]]\n\n\'\'\'Výhody:\'\'\'\n\n# logické či geografické dělení sítí (např. jednotlivá oddělení firmy mají vlastní podsíť)\n# snížení zátěže na síti – omezení vysílání typu broadcast (např. ARP dotazy)\n# bezpečnost při oddělení podsítí\n# jednodušší administrace\n[[Soubor:Podsite.png]]\n# V tomto případě pořebujeme 3 podsítě, tudíž nám pro SubnetID stačí dva bity (možné 4 podsítě)\n\n----\n\n=====Beztřídní adresování=====\n\n# Snaha o efektivní využití adresového prostoru\n# Síťová část IP adresy může mít libovolný počet bitů\n# Formát beztřídní adresy je w.x.y.z/n, kde n udává počet bitů síťové části IP adresy\n# Pokud firma požaduje blok adres pro 1000 počítačů, bude mít adresu w.x.y.z/22. Posledními 10ti bity totiž můžeme adresovat 1024 počítačů, čímž se efektivně využije adresový prostor\n# V případě tŕídního adresování by organizace dostala adresu typu B, kde je možné mít přes 65 tis. adres, což je příliš\n\n\'\'\'Prefix\'\'\' – číslo, které udává počet bitů síťové části IP adresy\n\'\'\'Maska\'\'\' – odvozuje se z prefixu. Má formát IP adresy, její konktrétní hodnotou jsou všechny jedničkové bity prefixu a zbytek nulový.\n\'\'\'Příklad:\'\'\'\n\n Prefix - /8 --> bitový zápis prefixu - 11111111 00000000 00000000 00000000 --> maska: 255.0.0.0\n Prefix - /11 --> bitový zápis prefixu - 11111111 11100000 00000000 00000000 –-> maska: 255.224.0.0\n\n======Výpočet počtů sítí a počítačů v síti======\n\'\'\'Počet sítí:\'\'\' 2^(počet bitů prefixu) – 2\n# V třídním adresování se na základě třídy 1-3 bity z prefixu odeberou\n\n\'\'\'Počet stanic:\'\'\' 2^(počet zbývajících bitů) – 2\n# 2 se odečítá proto, že nejvyšší adresa v síti slouží pro broadcast a nejnižší pro označení celé sítě\n\n----\n\n=====Překlad adres (NAT)=====\n\n# Způsob mapování a překladu IP adres z jedné skupiny IP adres na druhou\n# Překlad adres může být: 1:1, M:N, N:1 (PAT)\n## M:N - M adres vnitřní sítě se mapuje na N adres vnější sítě, obvykle M <= N\n\n\'\'\'Výhody:\'\'\'\n\n# Šetření IP adres (Mnoho spojení v rámci organizace požaduje pouze interní komunikaci. Pouze malá část počítačů se v určitý okamžik připojí na internet)\n# Redukuje útoky typu „spoofing“, kdy se útočníkův počítač tváří jako lokální. (Nat používá pro vnitřní systém privátní IP adresy, které se nepoužívají v Internetu. Pokud se tam vyskytnou, směřovač je zahodí)\n# Odstraňuje potřebu změnit IP adresy počítačů, když dojde ke změně ISP\n\n\'\'\'Nevýhody:\'\'\'\n\n# NAT vyžaduje nároky na hardware či software při překladu adres a udržování překladové tabulky\n# Stanice, které jsou umístěny ve vnitřní síti, nelze v případě PAT adresovat\n# PAT používá čísla portů pro adresování počítačů, nikoli procesů, což je původní význam čísel portů\n# NAT omezuje použití kryptování a autentizace. Autentizace, která zaočítává původní IP hlavičku do kontrolního součtu, nebude pracovat korektně s prekladem PAT\n# Neustálé používání NAT brzdí rozšiřování protokolu IPv6\n\n----\n\n=====IPv6=====\n\n# IPv6 adresa má 128 bitů\n# Preferovný zápis je ve formátu X:X:X:X:X:X:X:X, kde X je hexadecimální zápis 16ti-bitového čísla (dohromady 8 čísel)\n# Zápis adresy lze skrátit použitím následujících pravidel:\n## Nuly na začátku každého 16ti bitového čísla lze vynechat\n## Blok samých nul lze nahradit jedinou nulou\n## Libovolný počet nulových bloků lze nejvýše jednou nahradit znakem „::“\n# Alternativní zápis IPv6 adresy může mít tvar X:X:X:X:X:X:D.D.D.D, kde pro X platí stejná pravidla jaké předtím a D je desítkový zápis 8mi bitového čísla (shodné s formátem IPv4)\n\'\'\'Příklady platných IPv6 adres:\'\'\'\n 1080:0000:0000:0000:0008:0800:200C:417A\n 1080:0:0:0:8:800:200C:417A\n 1080::8:800:200C:417A\n 1080::8:800:32.12.65.122\n\'\'\'Rozdělení adres:\'\'\'\n# IPv6 ruší broadcast adresy a k existujícím unicast a multicast zavádí nový typ anycast\n# Anycast se chová stejně jako unicast, s tím, že může být přiřazená více uzlům. Klient pak komunikuje s tím uzlem, který odpověděl jako první\n# Další možnost je rodělit adresy podle rozsahu:\n## Adresy na lince (neprojdou za router)\n## Lokální adresy (ULA, nejsou směřovatelné ve veřejné síti)\n## Veřejné adresy\n[[Soubor:IPv6.png]]\n# Linkové adresy – nesmějí se směřovat a nelze je proto použít pro komunikaci v rozlehlejší síti. Obvykle se tato adresa generuje automaticky a používá se pro další komunikaci mezi nižšími službami\n# Lokální adresy (ULA)– Síťová část ULA adresy sestává z těchto částí:\n## Prefix – FC00::/7\n## L bit- 1 pokud byl prefix přiřazen lokálně, 0 zatím nebyla definována\n## Global ID – identifikátor sítě, měl by být unikátní\n## Subnet ID – identifikátor podsítě. ULA adresy umožňují až 65 536 podsítí\n## Interface ID – identifikátor rozhraní. Je několik variant jak ho získat\n\n----\n\n==UDP==\n# User Datagram Protocol\n# Jednoduchý protokol transportní vrstvy orientovaný na zprávy\n# Neposkytuje žádné záruky doručení a odesilatelova UDP vrstva si u jednou už odeslaných zpráv neudržuje žádný stav\n# Postrádá mechanismus předcházení a regulace zahlcení sítě, je nutné nadbytečné UDP datagramy na routerech zahazovat\n# Důraz na rychlost doručení -> vhodné např. u VoIP a multimédií\n# Nevytváří spojení (data se odesílají na server pomocí sendto() a přijímají pomocí recvfrom())\n# Je používán DNS, DHCP, SNMP\n\n==TCP==\n# Transmission Control Protocol\n# Vytváří spojení -> point-to-point (jeden odesílatel, jeden příjemce)\n# Spolehlivé doručování, ve správném pořadí\n# \'\'\'Three Way Handshake:\'\'\'\n## klient -> server – datagram s příznakem SYN číslem sekvence x, potvrzovací číslo 0\n## server -> klient – datagram s příznakem SYN a ACK, číslo sekvence y, potvrzovací x+1\n## klient -> server – datagram s příznakem ACK, císlo sekvence x+1, potvrzovací y+1\n[[Soubor:3way_hanshake.png]]\n# \'\'\'Ukončení spojení\'\'\':\n## klient -> server – datagram s příznakem FIN\n## server -> klient – odpoví datagramem s příznakem ACK\n## server -> klient – odešle datagram s příznakem FIN\n## klient -> server – odpoví s nastaveným příznakem ACK\n[[Soubor:TCP_end.png]]\n\n----\n\n==Model klient-server==\n# Standardní schéma komunikace mezi dvěma procesy\n\'\'\'Klient:\'\'\'\n# klient iniciuje spojení\n# klient zprávu přeloží do protokolu a odešle (nic nezpracovává, jen konvertuje do jiné syntaxe)\n# proměnná adresa\n# klienti nekomunikují mezi sebou\n\n\'\'\'Server:\'\'\'\n# čeká na požadavky, zpracuje je a odešle odpověď\n# pevná adresa\n# existují farmy serverů\n\n\'\'\'Protokol:\'\'\' soubor syntaktických a sémantických pravidel určujících výměnu informace nejméně mezi 2 entitami.\n# zahrnuje navázání spojení, adresování, přenos dat, zpracování chyb, řízení toku, přidělování prostředků\n\n\n----\n\n====Konkurentní TCP server:====\n\n# Vytvořit scránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem - bind()\n# Přepni scránku do pasivního čekání – listen()\n# Přijmi nový požadavek a vytvoř spojení – accept()\n# Pro nové spojení vytvoř nový proces – fork()\n# Vyměňuj si zprávy s klientem – read(), write()\n# Uzavři schránku a ukonči proces – close(), exit()\n\n====Iterativní TCP server:====\n\n# To samé bez fork()\n\n\n====Iterativní UDP server:====\n\n# Server čeká na požadavek\n# Načte požadavek, zpracuje, odešle odpověď a čeká na další\n# Většina UDP serverů je iterativních\n\n====Konkurentní UDP server:====\n\n# Vytvoř schránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem – bind()\n# Vyčkej na požadavek klienta – recvfrom()\n# Přijmi požadavek, vytvoř nový proces – fork()\n# V novém procesu odešli odpověď – sendto()\n# Ukonči proces potomka – exit()\n\n\n====Programové prostředky pro komunikaci mezi procesy:====\n\n# Unixové roury (pipes)\n# UUCP komunikace (unix to unix copy) – z hlediska bezpečnosti se dnes moc nepoužívá\n# Volání vzdálených procedur RPC\n# BSD scránky (sockets)\n\n\n=====BSD schránky=====\n\n# Aplikační (programové) rozhraní pro komunikující procesy\n# Abstraktní datová struktura obsahující údaje pro komunikaci\n# Pracují na transportní úrovni (TCP, UDP)\n# Určeny pro vytváření uživatelských aplikací\n# Nezasahují do nižších vrstev\n\n\n======Schránky typu „raw“======\n\n# Komunikace s nízkoúrovňovými protokoly\n# Používají se při čtení komunikace IP, ICMP, IGMP\n# Uživatel musí znát podrobně strukturu IP, příp. ICMP\n# Pouze správce systému (root) má právo vytvořit schránku typu „raw“\n\n\n=====RPC – Remote Procedure Call=====\n\n# Pracuje nad transportí vrstvou, tzn. na relační vrstvě v modelu ISO/OSI a aplikační v modelu TCP/IP\n# Slouží k programování komunikace po síti (aplikace typu klient-server)\n# K adresování používá speciální číslo programu, v kt. je procedura implementovaná a má se spouštět, navíc se přidává verze\n[[Soubor:RPC.png]]\n\n\'\'\'Činnost RPC:\'\'\'\n\n1. Klient volá vzdálenou proceduru. Client stub zjistí vzdálený port\n\n2. Client stub zabalí parametry zo zprávy RPC a pošle\n\n3. Zpráva je přenesena pomocí zprávy RPC nad UDP po síti\n\n4. Knihovna RPC předá volání funkci server stub. Ta zavolá proceduru\n\n5. Výsledek pošle server stub zpět\n\n6. Client stub přijme odpověď, dekóduje výsledek a předá ho aplikaci','utf-8'),(91,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url\n\n----\n\n==IP adresy==\n# IP adresy jsou centrálně spravovány organizací IANA\n# IP adresy rozdělují regionální registrátoři (RIR), rozděleni do několika regionů, Evropa má RIPE NCC\n# IP adresy mohou být:\n## statické – přiděleny napevno\n## dynamické – přiděleny jen po dobu komunikace\n### Pro dynamické přidělování IPv4 adres se používá systém DHCP\n\n======IPv4======\n# Čtvrtá verze protkolu IP, ale první, která se masivně rozšířila\n# IPv4 adresa sestává z 32 bitů, které jsou zapsáne dekadicky po jednotlivých bajtech oddělených tečkou\n# 3. února 2011 byli rozděleny poslední bloky adres IPv4, čímž došlo k jejich vyčerpání\n======DHCP======\n# DHCP Discover – počítač přijde so sítě a nemá IP adresu. Tak zařve na broadcast (port 67), zda tan není DHCP server\n# DHCP Offer – odpověd DHCP serveru, nabídne IP adresu\n# DHCP ACK – potvrzuje přijetí volby a přidělení IP adresy na určitou dobu (lease)\n# DHCP Release – uvolnění IP adresy\n\n====Schémata IP adresování====\n# Rozdělení IP adres do tříd\n# Vytváření podsítí (subnetting)\n# Beztřídní adresování (pomocí masky, bez tříd)\n# Překlad adres NAT\n# Adresování IPv6\n\n----\n\n=====Rozdělení IP adres do tříd=====\n[[Soubor:tridni_adr.png]]\n# Prefix sítě označuje počet jedičkových bitů v masce sítě\n# Nejnižší adresa v síti slouží pro označení celé sítě\n# Nejvyšší adresa v síti slouží pro broadcast\n# Adresa 127.0.0.0 je určena pro loopback (localhost), logická smyčka umožňující posílat pakety sám sobě\n# Interní IP adresy:\n## slouží pro adresování vnitřních sítí, na internetu se nikdy nemohou objevit\n## ve třídě A: 10.0.0.0 – 10.255.255.255\n## ve třídě B: 172.16.0.0 – 172.31.255.255\n## ve třídě C: 192.168.0.0 – 192.168.255.255\n\n\n# I když jsou ve třídním adresování prefixy dlouhé 8,16 a 24 bitů počet sítí je pouze 2^7 – 2, 2^14 – 2 a 2^21 – 2. Zdánlivě se nám ztratily 1, 2 a 3 bity v adresách typu A, B a C. Jenže tyhle bity jsou již vyhrazeny jakožto “určující začátek”, jinými slovy, určují rozsah konkrétní třídy. Ve třídě A je vyhrazen první bit, který je nulový, tudíž rozsah může být jen 0 – 127. V adrese B se jedná již o dva bity a adrese typu C až tři.\n\n----\n\n=====Vytváření podsítí (subnetting)=====\n# Cílem efektivní využití adresového prostoru\n# Na rozdíl od předchozího schématu, kdy maska sítě závisí na třídě adresy, je možné rozdělit část adresy určenou pro počítače ještě na adresu podsítě a adresu počítače libovolně podle aktuálních potrěb\n[[Soubor:Subnetting.png]]\n\n\'\'\'Výhody:\'\'\'\n\n# logické či geografické dělení sítí (např. jednotlivá oddělení firmy mají vlastní podsíť)\n# snížení zátěže na síti – omezení vysílání typu broadcast (např. ARP dotazy)\n# bezpečnost při oddělení podsítí\n# jednodušší administrace\n[[Soubor:Podsite.png]]\n# V tomto případě pořebujeme 3 podsítě, tudíž nám pro SubnetID stačí dva bity (možné 4 podsítě)\n\n----\n\n=====Beztřídní adresování=====\n\n# Snaha o efektivní využití adresového prostoru\n# Síťová část IP adresy může mít libovolný počet bitů\n# Formát beztřídní adresy je w.x.y.z/n, kde n udává počet bitů síťové části IP adresy\n# Pokud firma požaduje blok adres pro 1000 počítačů, bude mít adresu w.x.y.z/22. Posledními 10ti bity totiž můžeme adresovat 1024 počítačů, čímž se efektivně využije adresový prostor\n# V případě tŕídního adresování by organizace dostala adresu typu B, kde je možné mít přes 65 tis. adres, což je příliš\n\n\'\'\'Prefix\'\'\' – číslo, které udává počet bitů síťové části IP adresy\n\'\'\'Maska\'\'\' – odvozuje se z prefixu. Má formát IP adresy, její konktrétní hodnotou jsou všechny jedničkové bity prefixu a zbytek nulový.\n\'\'\'Příklad:\'\'\'\n\n Prefix - /8 --> bitový zápis prefixu - 11111111 00000000 00000000 00000000 --> maska: 255.0.0.0\n Prefix - /11 --> bitový zápis prefixu - 11111111 11100000 00000000 00000000 –-> maska: 255.224.0.0\n\n======Výpočet počtů sítí a počítačů v síti======\n\'\'\'Počet sítí:\'\'\' 2^(počet bitů prefixu) – 2\n# V třídním adresování se na základě třídy 1-3 bity z prefixu odeberou\n\n\'\'\'Počet stanic:\'\'\' 2^(počet zbývajících bitů) – 2\n# 2 se odečítá proto, že nejvyšší adresa v síti slouží pro broadcast a nejnižší pro označení celé sítě\n\n----\n\n=====Překlad adres (NAT)=====\n\n# Způsob mapování a překladu IP adres z jedné skupiny IP adres na druhou\n# Překlad adres může být: 1:1, M:N, N:1 (PAT)\n## M:N - M adres vnitřní sítě se mapuje na N adres vnější sítě, obvykle M <= N\n\n\'\'\'Výhody:\'\'\'\n\n# Šetření IP adres (Mnoho spojení v rámci organizace požaduje pouze interní komunikaci. Pouze malá část počítačů se v určitý okamžik připojí na internet)\n# Redukuje útoky typu „spoofing“, kdy se útočníkův počítač tváří jako lokální. (Nat používá pro vnitřní systém privátní IP adresy, které se nepoužívají v Internetu. Pokud se tam vyskytnou, směřovač je zahodí)\n# Odstraňuje potřebu změnit IP adresy počítačů, když dojde ke změně ISP\n\n\'\'\'Nevýhody:\'\'\'\n\n# NAT vyžaduje nároky na hardware či software při překladu adres a udržování překladové tabulky\n# Stanice, které jsou umístěny ve vnitřní síti, nelze v případě PAT adresovat\n# PAT používá čísla portů pro adresování počítačů, nikoli procesů, což je původní význam čísel portů\n# NAT omezuje použití kryptování a autentizace. Autentizace, která zaočítává původní IP hlavičku do kontrolního součtu, nebude pracovat korektně s prekladem PAT\n# Neustálé používání NAT brzdí rozšiřování protokolu IPv6\n\n----\n\n=====IPv6=====\n\n# IPv6 adresa má 128 bitů\n# Preferovný zápis je ve formátu X:X:X:X:X:X:X:X, kde X je hexadecimální zápis 16ti-bitového čísla (dohromady 8 čísel)\n# Zápis adresy lze skrátit použitím následujících pravidel:\n## Nuly na začátku každého 16ti bitového čísla lze vynechat\n## Blok samých nul lze nahradit jedinou nulou\n## Libovolný počet nulových bloků lze nejvýše jednou nahradit znakem „::“\n# Alternativní zápis IPv6 adresy může mít tvar X:X:X:X:X:X:D.D.D.D, kde pro X platí stejná pravidla jaké předtím a D je desítkový zápis 8mi bitového čísla (shodné s formátem IPv4)\n\'\'\'Příklady platných IPv6 adres:\'\'\'\n 1080:0000:0000:0000:0008:0800:200C:417A\n 1080:0:0:0:8:800:200C:417A\n 1080::8:800:200C:417A\n 1080::8:800:32.12.65.122\n\'\'\'Rozdělení adres:\'\'\'\n# IPv6 ruší broadcast adresy a k existujícím unicast a multicast zavádí nový typ anycast\n# Anycast se chová stejně jako unicast, s tím, že může být přiřazená více uzlům. Klient pak komunikuje s tím uzlem, který odpověděl jako první\n# Další možnost je rodělit adresy podle rozsahu:\n## Adresy na lince (neprojdou za router)\n## Lokální adresy (ULA, nejsou směřovatelné ve veřejné síti)\n## Veřejné adresy\n[[Soubor:IPv6.png]]\n# Linkové adresy – nesmějí se směřovat a nelze je proto použít pro komunikaci v rozlehlejší síti. Obvykle se tato adresa generuje automaticky a používá se pro další komunikaci mezi nižšími službami\n# Lokální adresy (ULA)– Síťová část ULA adresy sestává z těchto částí:\n## Prefix – FC00::/7\n## L bit- 1 pokud byl prefix přiřazen lokálně, 0 zatím nebyla definována\n## Global ID – identifikátor sítě, měl by být unikátní\n## Subnet ID – identifikátor podsítě. ULA adresy umožňují až 65 536 podsítí\n## Interface ID – identifikátor rozhraní. Je několik variant jak ho získat\n\n----\n\n==UDP==\n# User Datagram Protocol\n# Jednoduchý protokol transportní vrstvy orientovaný na zprávy\n# Neposkytuje žádné záruky doručení a odesilatelova UDP vrstva si u jednou už odeslaných zpráv neudržuje žádný stav\n# Postrádá mechanismus předcházení a regulace zahlcení sítě, je nutné nadbytečné UDP datagramy na routerech zahazovat\n# Důraz na rychlost doručení -> vhodné např. u VoIP a multimédií\n# Nevytváří spojení (data se odesílají na server pomocí sendto() a přijímají pomocí recvfrom())\n# Je používán DNS, DHCP, SNMP\n\n==TCP==\n# Transmission Control Protocol\n# Vytváří spojení -> point-to-point (jeden odesílatel, jeden příjemce)\n# Spolehlivé doručování, ve správném pořadí\n# \'\'\'Three Way Handshake:\'\'\'\n## klient -> server – datagram s příznakem SYN číslem sekvence x, potvrzovací číslo 0\n## server -> klient – datagram s příznakem SYN a ACK, číslo sekvence y, potvrzovací x+1\n## klient -> server – datagram s příznakem ACK, císlo sekvence x+1, potvrzovací y+1\n[[Soubor:3way_hanshake.png]]\n# \'\'\'Ukončení spojení\'\'\':\n## klient -> server – datagram s příznakem FIN\n## server -> klient – odpoví datagramem s příznakem ACK\n## server -> klient – odešle datagram s příznakem FIN\n## klient -> server – odpoví s nastaveným příznakem ACK\n[[Soubor:TCP_end.png]]\n\n----\n\n==Model klient-server==\n# Standardní schéma komunikace mezi dvěma procesy\n\'\'\'Klient:\'\'\'\n# klient iniciuje spojení\n# klient zprávu přeloží do protokolu a odešle (nic nezpracovává, jen konvertuje do jiné syntaxe)\n# proměnná adresa\n# klienti nekomunikují mezi sebou\n\n\'\'\'Server:\'\'\'\n# čeká na požadavky, zpracuje je a odešle odpověď\n# pevná adresa\n# existují farmy serverů\n\n\'\'\'Protokol:\'\'\' soubor syntaktických a sémantických pravidel určujících výměnu informace nejméně mezi 2 entitami.\n# zahrnuje navázání spojení, adresování, přenos dat, zpracování chyb, řízení toku, přidělování prostředků\n\n\n----\n\n====Konkurentní TCP server:====\n\n# Vytvořit scránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem - bind()\n# Přepni scránku do pasivního čekání – listen()\n# Přijmi nový požadavek a vytvoř spojení – accept()\n# Pro nové spojení vytvoř nový proces – fork()\n# Vyměňuj si zprávy s klientem – read(), write()\n# Uzavři schránku a ukonči proces – close(), exit()\n\n====Iterativní TCP server:====\n\n# To samé bez fork()\n\n\n====Iterativní UDP server:====\n\n# Server čeká na požadavek\n# Načte požadavek, zpracuje, odešle odpověď a čeká na další\n# Většina UDP serverů je iterativních\n\n====Konkurentní UDP server:====\n\n# Vytvoř schránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem – bind()\n# Vyčkej na požadavek klienta – recvfrom()\n# Přijmi požadavek, vytvoř nový proces – fork()\n# V novém procesu odešli odpověď – sendto()\n# Ukonči proces potomka – exit()\n\n----\n\n====Programové prostředky pro komunikaci mezi procesy:====\n\n# Unixové roury (pipes)\n# UUCP komunikace (unix to unix copy) – z hlediska bezpečnosti se dnes moc nepoužívá\n# Volání vzdálených procedur RPC\n# BSD scránky (sockets)\n\n\n=====BSD schránky=====\n\n# Aplikační (programové) rozhraní pro komunikující procesy\n# Abstraktní datová struktura obsahující údaje pro komunikaci\n# Pracují na transportní úrovni (TCP, UDP)\n# Určeny pro vytváření uživatelských aplikací\n# Nezasahují do nižších vrstev\n\n\n======Schránky typu „raw“======\n\n# Komunikace s nízkoúrovňovými protokoly\n# Používají se při čtení komunikace IP, ICMP, IGMP\n# Uživatel musí znát podrobně strukturu IP, příp. ICMP\n# Pouze správce systému (root) má právo vytvořit schránku typu „raw“\n\n\n=====RPC – Remote Procedure Call=====\n\n# Pracuje nad transportí vrstvou, tzn. na relační vrstvě v modelu ISO/OSI a aplikační v modelu TCP/IP\n# Slouží k programování komunikace po síti (aplikace typu klient-server)\n# K adresování používá speciální číslo programu, v kt. je procedura implementovaná a má se spouštět, navíc se přidává verze\n[[Soubor:RPC.png]]\n\n\'\'\'Činnost RPC:\'\'\'\n\n1. Klient volá vzdálenou proceduru. Client stub zjistí vzdálený port\n\n2. Client stub zabalí parametry zo zprávy RPC a pošle\n\n3. Zpráva je přenesena pomocí zprávy RPC nad UDP po síti\n\n4. Knihovna RPC předá volání funkci server stub. Ta zavolá proceduru\n\n5. Výsledek pošle server stub zpět\n\n6. Client stub přijme odpověď, dekóduje výsledek a předá ho aplikaci','utf-8'),(92,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(93,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A_x + B_y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(94,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(95,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\n----\n\n\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag) vždy na jednom řádku.\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nPokud chcu do indexu dát delší výraz uzavřu ho do složených závorek <nowiki>x_{n+m+1}</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(96,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(97,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>d_x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(98,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí 2*delta*x\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(99,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(100,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n\n{\n\n int dx = x2-x1, dy = y2-y1;\n\n int P = 2*dy – dx;\n\n int P1 = 2*dy, P2 = P1 - 2*dx;\n\n int y = y1;\n \n\n for (int x = x1; x <= x2; x++)\n\n {\n\n draw_pixel( x, y);\n\n if (P >= 0)\n\n { P += P2; y++; }\n\n else\n\n P += P1;\n\n }\n\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(101,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n\n{\n\n int dx = x2-x1, dy = y2-y1;\n\n int P = 2*dy – dx;\n\n int P1 = 2*dy, P2 = P1 - 2*dx;\n\n int y = y1;\n \n\n for (int x = x1; x <= x2; x++)\n\n {\n\n draw_pixel( x, y);\n\n if (P >= 0)\n\n { P += P2; y++; }\n\n else\n\n P += P1;\n\n }\n\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(102,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n\n<nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(103,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y – delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(104,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\nKdyž to zlobí a nechce to udělat kód z neformátovaného textu pomohlo mě před začátek \"nowiki\" dat mezeru.\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag) vždy na jednom řádku.\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nPokud chcu do indexu dát delší výraz uzavřu ho do složených závorek <nowiki>x_{n+m+1}</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(105,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y–delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(106,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n<nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(107,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\nint x = 0, y = R;\nwhile (x <= y)\n{\ndraw_pixel_circle(x, y);\nx++;\ny = sqrt(R*R – x*x);\n}\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(108,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\nPrincip:\n1. posouvání o konstantní úhel\n2. vypočtení souřadnice\n3. spojení souřadnic úsečkou\n\npozor ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\nxn+1 = xn * cos alfa - yn *sin alfa\nyn+1 = xn *sin alfa + yn *cos alfa\n\nKód:\nCircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(109,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n cos(alfa) - y_n sin(alfa)</m>\n<m>y_{n+1} = x_n sin alfa + y_n cos alfa</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\ndouble cosa = cos(2*PI/N);\ndouble sina = sin(2*PI/N);\nint x1 = R, y1 = 0, x2, y2;\nfor (int i = 0; i < N; i++)\n{\nx2 = x1*cosa – y1*sina;\ny2 = x1*sina + y1*cosa;\ndraw_line(x1, y1, x2, y2);\nx1 = x2;\ny1 = y2;\n}\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(110,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n cos( alfa ) - y_n sin( alfa )</m>\n<m>y_{n+1} = x_n sin( alfa ) + y_n cos( alfa )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(111,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alfa ) - y_n sin( alfa )</m>\n<m>y_{n+1} = x_n sin( alfa ) + y_n cos( alfa )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(112,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\nKdyž to zlobí a nechce to udělat kód z neformátovaného textu pomohlo mě před začátek \"nowiki\" dat mezeru.\n\nKód: dvojí odřádkování, mezera a tag nowiky, za kterým hned následuje začátek kódu\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag) vždy na jednom řádku.\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nPokud chcu do indexu dát delší výraz uzavřu ho do složených závorek <nowiki>x_{n+m+1}</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(113,'\n\n\n\n=====Obsah:=====\nvytváří se automaticky z nadpisů.\n\n----\n\n\n\n=====Obecné:=====\nNový řádek: pomocí 2 entrů.\n\nTučné a kurzíva pomocí znaků nad editačním textboxem.\n\nPodtržení nepoužívat (pouze u hypertextových odkazů).\n\n----\n\n\n\n=====Nadpisy:=====\nNadpis se ohraničí znakem rovná se \"=\", před i za slovem.\n\nČím více rovná se, tím hlubší úroveň nadpisu.\n\nPři zkopírování z wordu se zachovají úrovně nadpisů.\n\nNadpis první úrovně je vyhrazen pro název stránky.\n\n\'\'\'Myšlenkové celky oddělujte vodorovnou čarou.\'\'\'\n\n----\n\n\n\n=====Odkazy:=====\nRozlišovat odkazy uvnitř wiki a odkazy ven.\n\nPříslušná tlačítka k tomu jsou zase nad editačním polem.\n\nPři vnitřním odkazu stačí napsat název stránky a ta se sama prováže například: <nowiki>[Formátování]</nowiki>\n\nPři venkovním odkazu se mezi závorky napíše odkaz a za mezeru text, který chcete zobrazit místo ošklivé URL.\n\n----\n\n\n\n=====Kódy:=====\nse vkládají do pole nowiki (párový html tag) přeškrtnuté W v kolečku, k nalezení mezi tlačítky při úpravě textu nebo napsat <nowiki><nowiki>kód</nowiki></nowiki>\n\nKdyž to zlobí a nechce to udělat kód z neformátovaného textu pomohlo mě před začátek \"nowiki\" dat mezeru.\n\nKód: dvojí odřádkování, mezera a tag nowiky, za kterým hned následuje začátek kódu\n\n----\n\n=====Matematika:=====\nUvozovat do pole <nowiki><m>vzorec</m></nowiki> (párový html tag) vždy na jednom řádku.\n\nMalé znaky řecké abecedy možno napsat slovem (anglický název malými písmeny) a samo se změní.\n\nDolní index napsat za podtržítko. <nowiki>x_2</nowiki>\n\nHorní index (mocnina) za stříšku. <nowiki>x^n</nowiki>\n\nPokud chcu do indexu dát delší výraz uzavřu ho do složených závorek <nowiki>x_{n+m+1}</nowiki>\n\nLomené výrazy stačí pouze správně uzávorkovat.\n\nSouhrn všeho najdete [http://www.xm1math.net/phpmathpublisher/doc/help.html ZDE]\n\n----\n\n=====Odrážky:=====\nkaždá odrážka je křížek: <nowiki>#</nowiki> . Pokud chceme použít křížek je třeba jej uvodit do nowiki.','utf-8'),(114,'...coming soon','utf-8'),(115,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu y = odmocnica( R^2 – x^2) a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(116,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt( R^2 – x^2) </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(117,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(118,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt R^2 - x^2 </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrt(R*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(119,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\nPrincip:\nstejne jako předchozí začne na 0,R až po x = y\n1. v ose x se postupuje po dx = 1\n2. v ose y podle znaménka prediktoru\n\nPrediktor:\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\nPrediktor je funkční hodnota v bodě kružnice\npi = (xi + 1)^2 + (yi – 1/2)^2 – R^2\ncoz není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\npi +1 = pi + 2xi + 3 kde pi je < 0\npi +1 = pi + 2xi 2yi + 5 kde pi >= 0\n\nmusí se stanovit ještě počáteční prediktor a to bude pi = 1-R\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\nCircleMid(int s1, int s2, int R)\n{ int x = 0, y = R;\nint P = 1-R, X2 = 3, Y2 = 2*R-2;\nwhile (x < y)\n{\ndraw_pixel_circle(x, y);\nif (P >= 0)\n{ P += -Y2; Y2 -= 2; y--; }\nP += X2;\nX2 += 2;\nx++;\n}\n}\n\n\n\n----\n\n\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(120,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i – 1/2)^2 – R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>pi +1 = pi + 2xi + 3 kde pi je < 0</m>\n<m>pi +1 = pi + 2xi 2yi + 5 kde pi >= 0</m\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(121,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3, kde p_i je < 0 </m>\n<m>p_{i+1} = p_i + 2 x_i 2yi + 5 kde pi >= 0</m\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(122,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(123,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(124,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos( alpha ) - y_n sin( alpha )</m>\n\n<m>y_{n+1} = x_n sin( alpha ) + y_n cos( alpha )</m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(125,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\nPrincip:\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n3. na y se posouváme podle znaménka prediktoru\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n5. a v ose x s posunujeme podle znaménka prediktoru\n\nKód:\n<nowiki>ElipseMid(int A, int B)\n{ int x = 0, y = B, AA = A*A, BB = B*B;\nint P = BB – AA*B + AA/4;\nwhile (AA*y > BB*x)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+3); x++; }\nelse\n{ P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n}\nP = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\nwhile (y >= 0)\n{ draw_pixel_elipse(x, y);\nif (P < 0)\n{ P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\nelse\n{ P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(126,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není 2*b^2 * x = 2*a^ * y (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { P += BB*(2*x+3); x++; }\n else\n { P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\n else\n { P += AA*(3-2*y); y--; }\n}\n}</nowiki>','utf-8'),(127,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { P += BB*(2*x+3); x++; }\n else\n { P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\n else\n { P += AA*(3-2*y); y--; }\n }\n}</nowiki>','utf-8'),(128,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { P += BB*(2*x+3); x++; }\n else\n { P += BB*(2*x+3) + AA*(2-2*y); x++; y--; }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { P += BB*(2*x+2) + AA*(3-2*y); x++; y--; }\n else\n { P += AA*(3-2*y); y--; }\n }\n}</nowiki>','utf-8'),(129,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\nPrincip:\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\nObecný výpočet:\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\nKód:\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(130,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(131,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n[12 Transformace, reprezentace a zobrazení 3D objektů] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(132,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 [12 Transformace, reprezentace a zobrazení 3D objektů] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(133,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(134,'','utf-8'),(135,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\nPrincip:\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\nKód:\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(136,'','utf-8'),(137,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\nKód:\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(138,'','utf-8'),(139,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(140,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\nKód:\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(141,'','utf-8'),(142,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(143,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 38\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL] \n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(144,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 38\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n12 Transformace, reprezentace a zobrazení 3D objektů - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27_Vyhledávání_a_řazení|27 Vyhledávání a řazení - IAL]]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(145,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 27, 38\n\n\'\'\'Hotovo\'\'\':\n39\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n[[12_Transformace_reprezentace_a_zobrazení_3D_objektů | 12 Transformace, reprezentace a zobrazení 3D objektů - IZG]] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27_Vyhledávání_a_řazení|27 Vyhledávání a řazení - IAL]]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(146,'== Vyhledávání ==\n\nKlíč – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\nPřístupová doba – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\nZaslepení položky – označení hodnotou, která nebude nikdy vyhledávána.\n\nVyhledávací tabulka - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>\nbool found = false;\nwhile (!found && // mnozina neni vycerpana) \n{// prozkoumej prvek, kdyztak nastav nasel}\n// uloz nalezeny prvek, vrat vysledek\n</nowiki>\n\n= Sekvenční vyhledávání =\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n= Sekvenční vyhledávání v seřazeném poli =\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nSearch - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\nInsert - najde místo pro vložení prvku, zbytek posune doprava \n\nDelete – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n= Rychlé sekvenční vyhledávání =\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n= Vyhledávání v poli s rekonfigurací =\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n= Binární vyhledávání =\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\nBinární vyhledávací strom – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\nAVL strom – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n= Uniformní vyhledávání =\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n= Fibonacciho vyhledávání =\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n= Tabulky s rozptýlenými položkami (Hashovací tabulky) =\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. Pokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n= Vyhledávání v textu =\n\n\'\'\'Knuth-Morris-Prattův algoritmus\'\'\'\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n\'\'\'Boyer-Mooreův algoritmus\'\'\'\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n== Řazení ==\n\nTřídění (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\nŘazení (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n= Klasifikace metod řazení =\nPodle přístupu k paměti\n- Vnitřní řazení – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n- Vnější řazení – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\nPodle typu procesoru\n- Sériové – pracuje jeden procesor, jedna operace v daném okamžiku\n- Paralelní – více procesorů, více souběžných operací\nPodle principu řazení\n- Výběr (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n- Vkládání (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n- Rozdělování (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n- Slučování (merging) – spojuje postupně více seřazených podmnožin do jedné\nAlgoritmy řazení\nVlastnosti algoritmů\n- Stabilita – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n- Přirozenost – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\nČasová složitost algoritmů\n- Omikron - honí hranice, maximální rychlost růstu funkce\n- Omega - dolní hranice, minimální rychlost růstu funkce\n- Theta - oznažuje třídu časového chování algoritmu\nTheta(1) – konstantní\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\nSelectSort (Selection Sort)\nPopis: Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\nPostup:\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif \nVlastnosti: Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\nInsertSort (Insertion Sort)\nPopis: Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\nPostup:\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost.\n\nBubbleSort\nPopis: Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\nPostup:\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\nDalší verze: RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\nHeapSort\nPopis: Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\nPostup:\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif\nhttp://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost.\n\nQuickSort\nPopis: Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\nPostup:\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\nShellSort\nPopis: Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí. \nPostup:\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\nVizualizace zde: http://www.algoritmy.net/article/154/Shell-sort \nVlastnosti: Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\nRadixSort\nPopis: Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\nVlastnosti: Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\nMergeSort\nPopis: Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png \nPrincip slučování (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\nVlastnosti: Stabilní, přirozená, linearitmická časová složitost.\nDalší metody\nŘazení bez přesunu položek\n- Každý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n- Používá se pro objemná data, která se nevyplatí přesouvat v paměti. \nŘazení podle více klíčů\n- Například datum narození – rok, měsíc a den.\n- Řešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n- Řešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n- Řešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\nMacLarenův algoritmus\n- Uspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(147,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>\nbool found = false;\nwhile (!found && // mnozina neni vycerpana) \n{// prozkoumej prvek, kdyztak nastav nasel}\n// uloz nalezeny prvek, vrat vysledek\n</nowiki>\n\n== Sekvenční vyhledávání ==\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n= Sekvenční vyhledávání v seřazeném poli =\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nSearch - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\nInsert - najde místo pro vložení prvku, zbytek posune doprava \n\nDelete – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n= Rychlé sekvenční vyhledávání =\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n= Vyhledávání v poli s rekonfigurací =\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n= Binární vyhledávání =\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\nBinární vyhledávací strom – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\nAVL strom – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n= Uniformní vyhledávání =\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n= Fibonacciho vyhledávání =\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n= Tabulky s rozptýlenými položkami (Hashovací tabulky) =\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. Pokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n= Vyhledávání v textu =\n\n\'\'\'Knuth-Morris-Prattův algoritmus\'\'\'\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n\'\'\'Boyer-Mooreův algoritmus\'\'\'\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n== Řazení ==\n\nTřídění (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\nŘazení (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n= Klasifikace metod řazení =\nPodle přístupu k paměti\n- Vnitřní řazení – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n- Vnější řazení – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\nPodle typu procesoru\n- Sériové – pracuje jeden procesor, jedna operace v daném okamžiku\n- Paralelní – více procesorů, více souběžných operací\nPodle principu řazení\n- Výběr (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n- Vkládání (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n- Rozdělování (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n- Slučování (merging) – spojuje postupně více seřazených podmnožin do jedné\nAlgoritmy řazení\nVlastnosti algoritmů\n- Stabilita – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n- Přirozenost – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\nČasová složitost algoritmů\n- Omikron - honí hranice, maximální rychlost růstu funkce\n- Omega - dolní hranice, minimální rychlost růstu funkce\n- Theta - oznažuje třídu časového chování algoritmu\nTheta(1) – konstantní\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\nSelectSort (Selection Sort)\nPopis: Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\nPostup:\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif \nVlastnosti: Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\nInsertSort (Insertion Sort)\nPopis: Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\nPostup:\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost.\n\nBubbleSort\nPopis: Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\nPostup:\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\nDalší verze: RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\nHeapSort\nPopis: Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\nPostup:\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif\nhttp://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost.\n\nQuickSort\nPopis: Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\nPostup:\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\nShellSort\nPopis: Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí. \nPostup:\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\nVizualizace zde: http://www.algoritmy.net/article/154/Shell-sort \nVlastnosti: Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\nRadixSort\nPopis: Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\nVlastnosti: Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\nMergeSort\nPopis: Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png \nPrincip slučování (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\nVlastnosti: Stabilní, přirozená, linearitmická časová složitost.\nDalší metody\nŘazení bez přesunu položek\n- Každý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n- Používá se pro objemná data, která se nevyplatí přesouvat v paměti. \nŘazení podle více klíčů\n- Například datum narození – rok, měsíc a den.\n- Řešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n- Řešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n- Řešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\nMacLarenův algoritmus\n- Uspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(148,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>\nbool found = false;\nwhile (!found && // mnozina neni vycerpana) \n{// prozkoumej prvek, kdyztak nastav nasel}\n// uloz nalezeny prvek, vrat vysledek\n</nowiki>\n\n=== aaaaa ===\n==== bbbbb ====\n====== cccccc ======\n== Sekvenční vyhledávání ==\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n= Sekvenční vyhledávání v seřazeném poli =\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nSearch - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\nInsert - najde místo pro vložení prvku, zbytek posune doprava \n\nDelete – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n= Rychlé sekvenční vyhledávání =\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n= Vyhledávání v poli s rekonfigurací =\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n= Binární vyhledávání =\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\nBinární vyhledávací strom – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\nAVL strom – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n= Uniformní vyhledávání =\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n= Fibonacciho vyhledávání =\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n= Tabulky s rozptýlenými položkami (Hashovací tabulky) =\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. Pokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n= Vyhledávání v textu =\n\n\'\'\'Knuth-Morris-Prattův algoritmus\'\'\'\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n\'\'\'Boyer-Mooreův algoritmus\'\'\'\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n== Řazení ==\n\nTřídění (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\nŘazení (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n= Klasifikace metod řazení =\nPodle přístupu k paměti\n- Vnitřní řazení – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n- Vnější řazení – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\nPodle typu procesoru\n- Sériové – pracuje jeden procesor, jedna operace v daném okamžiku\n- Paralelní – více procesorů, více souběžných operací\nPodle principu řazení\n- Výběr (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n- Vkládání (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n- Rozdělování (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n- Slučování (merging) – spojuje postupně více seřazených podmnožin do jedné\nAlgoritmy řazení\nVlastnosti algoritmů\n- Stabilita – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n- Přirozenost – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\nČasová složitost algoritmů\n- Omikron - honí hranice, maximální rychlost růstu funkce\n- Omega - dolní hranice, minimální rychlost růstu funkce\n- Theta - oznažuje třídu časového chování algoritmu\nTheta(1) – konstantní\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\nSelectSort (Selection Sort)\nPopis: Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\nPostup:\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif \nVlastnosti: Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\nInsertSort (Insertion Sort)\nPopis: Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\nPostup:\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost.\n\nBubbleSort\nPopis: Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\nPostup:\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\nDalší verze: RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\nHeapSort\nPopis: Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\nPostup:\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif\nhttp://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost.\n\nQuickSort\nPopis: Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\nPostup:\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\nShellSort\nPopis: Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí. \nPostup:\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\nVizualizace zde: http://www.algoritmy.net/article/154/Shell-sort \nVlastnosti: Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\nRadixSort\nPopis: Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\nVlastnosti: Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\nMergeSort\nPopis: Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png \nPrincip slučování (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\nVlastnosti: Stabilní, přirozená, linearitmická časová složitost.\nDalší metody\nŘazení bez přesunu položek\n- Každý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n- Používá se pro objemná data, která se nevyplatí přesouvat v paměti. \nŘazení podle více klíčů\n- Například datum narození – rok, měsíc a den.\n- Řešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n- Řešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n- Řešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\nMacLarenův algoritmus\n- Uspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(149,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>bool found = false; while (!found && // mnozina neni vycerpana) \n{// prozkoumej prvek, kdyztak nastav nasel}\n// uloz nalezeny prvek, vrat vysledek</nowiki>\n<nowiki>\nbool found = false;\nwhile (!found && // mnozina neni vycerpana) \n{// prozkoumej prvek, kdyztak nastav nasel}\n// uloz nalezeny prvek, vrat vysledek\n</nowiki>\n\n=== Sekvenční vyhledávání ===\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n= Sekvenční vyhledávání v seřazeném poli =\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nSearch - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\nInsert - najde místo pro vložení prvku, zbytek posune doprava \n\nDelete – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n= Rychlé sekvenční vyhledávání =\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n= Vyhledávání v poli s rekonfigurací =\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n= Binární vyhledávání =\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\nBinární vyhledávací strom – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\nAVL strom – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n= Uniformní vyhledávání =\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n= Fibonacciho vyhledávání =\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n= Tabulky s rozptýlenými položkami (Hashovací tabulky) =\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. Pokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n= Vyhledávání v textu =\n\n\'\'\'Knuth-Morris-Prattův algoritmus\'\'\'\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n\'\'\'Boyer-Mooreův algoritmus\'\'\'\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n== Řazení ==\n\nTřídění (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\nŘazení (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n= Klasifikace metod řazení =\nPodle přístupu k paměti\n- Vnitřní řazení – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n- Vnější řazení – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\nPodle typu procesoru\n- Sériové – pracuje jeden procesor, jedna operace v daném okamžiku\n- Paralelní – více procesorů, více souběžných operací\nPodle principu řazení\n- Výběr (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n- Vkládání (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n- Rozdělování (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n- Slučování (merging) – spojuje postupně více seřazených podmnožin do jedné\nAlgoritmy řazení\nVlastnosti algoritmů\n- Stabilita – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n- Přirozenost – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\nČasová složitost algoritmů\n- Omikron - honí hranice, maximální rychlost růstu funkce\n- Omega - dolní hranice, minimální rychlost růstu funkce\n- Theta - oznažuje třídu časového chování algoritmu\nTheta(1) – konstantní\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\nSelectSort (Selection Sort)\nPopis: Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\nPostup:\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif \nVlastnosti: Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\nInsertSort (Insertion Sort)\nPopis: Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\nPostup:\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost.\n\nBubbleSort\nPopis: Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\nPostup:\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\nDalší verze: RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\nHeapSort\nPopis: Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\nPostup:\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif\nhttp://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost.\n\nQuickSort\nPopis: Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\nPostup:\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\nShellSort\nPopis: Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí. \nPostup:\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\nVizualizace zde: http://www.algoritmy.net/article/154/Shell-sort \nVlastnosti: Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\nRadixSort\nPopis: Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\nVlastnosti: Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\nMergeSort\nPopis: Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png \nPrincip slučování (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\nVlastnosti: Stabilní, přirozená, linearitmická časová složitost.\nDalší metody\nŘazení bez přesunu položek\n- Každý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n- Používá se pro objemná data, která se nevyplatí přesouvat v paměti. \nŘazení podle více klíčů\n- Například datum narození – rok, měsíc a den.\n- Řešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n- Řešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n- Řešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\nMacLarenův algoritmus\n- Uspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(150,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>bool found = false; \n\nwhile (!found && // mnozina neni vycerpana) \n\n{// prozkoumej prvek, kdyztak nastav nasel}\n\n// uloz nalezeny prvek, vrat vysledek</nowiki>\n\n\n=== Sekvenční vyhledávání ===\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n= Sekvenční vyhledávání v seřazeném poli =\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nSearch - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\nInsert - najde místo pro vložení prvku, zbytek posune doprava \n\nDelete – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n= Rychlé sekvenční vyhledávání =\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n= Vyhledávání v poli s rekonfigurací =\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n= Binární vyhledávání =\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\nBinární vyhledávací strom – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\nAVL strom – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n= Uniformní vyhledávání =\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n= Fibonacciho vyhledávání =\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n= Tabulky s rozptýlenými položkami (Hashovací tabulky) =\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. Pokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n= Vyhledávání v textu =\n\n\'\'\'Knuth-Morris-Prattův algoritmus\'\'\'\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n\'\'\'Boyer-Mooreův algoritmus\'\'\'\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n== Řazení ==\n\nTřídění (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\nŘazení (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n= Klasifikace metod řazení =\nPodle přístupu k paměti\n- Vnitřní řazení – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n- Vnější řazení – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\nPodle typu procesoru\n- Sériové – pracuje jeden procesor, jedna operace v daném okamžiku\n- Paralelní – více procesorů, více souběžných operací\nPodle principu řazení\n- Výběr (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n- Vkládání (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n- Rozdělování (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n- Slučování (merging) – spojuje postupně více seřazených podmnožin do jedné\nAlgoritmy řazení\nVlastnosti algoritmů\n- Stabilita – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n- Přirozenost – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\nČasová složitost algoritmů\n- Omikron - honí hranice, maximální rychlost růstu funkce\n- Omega - dolní hranice, minimální rychlost růstu funkce\n- Theta - oznažuje třídu časového chování algoritmu\nTheta(1) – konstantní\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\nSelectSort (Selection Sort)\nPopis: Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\nPostup:\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif \nVlastnosti: Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\nInsertSort (Insertion Sort)\nPopis: Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\nPostup:\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost.\n\nBubbleSort\nPopis: Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\nPostup:\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif \nVlastnosti: Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\nDalší verze: RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\nHeapSort\nPopis: Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\nPostup:\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif\nhttp://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost.\n\nQuickSort\nPopis: Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\nPostup:\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\nhttp://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif \nVlastnosti: Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\nShellSort\nPopis: Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí. \nPostup:\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\nVizualizace zde: http://www.algoritmy.net/article/154/Shell-sort \nVlastnosti: Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\nRadixSort\nPopis: Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\nVlastnosti: Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\nMergeSort\nPopis: Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\nhttp://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png \nPrincip slučování (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\nVlastnosti: Stabilní, přirozená, linearitmická časová složitost.\nDalší metody\nŘazení bez přesunu položek\n- Každý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n- Používá se pro objemná data, která se nevyplatí přesouvat v paměti. \nŘazení podle více klíčů\n- Například datum narození – rok, měsíc a den.\n- Řešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n- Řešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n- Řešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\nMacLarenův algoritmus\n- Uspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(151,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>bool found = false; \n\nwhile (!found && // mnozina neni vycerpana) \n\n{// prozkoumej prvek, kdyztak nastav nasel}\n\n// uloz nalezeny prvek, vrat vysledek</nowiki>\n\n\n=== Sekvenční vyhledávání ===\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n===== Uniformní vyhledávání ====\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n=== Tabulky s rozptýlenými položkami (Hashovací tabulky) ===\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n=== Vyhledávání v textu ===\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n=== Algoritmy řazení ===\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n===== InsertSort (Insertion Sort) =====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif]] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n===== BubbleSort =====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif]]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n===== HeapSort =====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif]] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n===== QuickSort =====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n===== ShellSort =====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\n\nVizualizace zde: [[http://www.algoritmy.net/article/154/Shell-sort]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png]] \n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n===== Další metody =====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(152,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>bool found = false; \n\nwhile (!found && // mnozina neni vycerpana) \n\n{// prozkoumej prvek, kdyztak nastav nasel}\n\n// uloz nalezeny prvek, vrat vysledek</nowiki>\n\n----\n\n== Sekvenční vyhledávání ==\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n----\n\n== Vyhledávání v poli s rekonfigurací ==\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n== Klasifikace metod řazení ==\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif]] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif]]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif]] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\n\nVizualizace zde: [[http://www.algoritmy.net/article/154/Shell-sort]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png]] \n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(153,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n<nowiki>bool found = false; \n\nwhile (!found && // mnozina neni vycerpana) \n\n{// prozkoumej prvek, kdyztak nastav nasel}\n\n// uloz nalezeny prvek, vrat vysledek</nowiki>\n\n\n----\n\n== Sekvenční vyhledávání ==\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif]] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif]]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif]] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\n\nVizualizace zde: [[http://www.algoritmy.net/article/154/Shell-sort]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png]] \n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'); INSERT INTO `text` VALUES (154,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n== Sekvenční vyhledávání ==\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n{ // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \nreturn nalezeno;\n}\n</nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n<nowiki> \npublic bool Search(tab tabulka, int klic, int n)\n{\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n{ // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n}\n</nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n<nowiki>\npublic bool Search(tab tabulka, int klic, int n)\n{\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n}\n</nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n<nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif]] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif]]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif]] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\n\nVizualizace zde: [[http://www.algoritmy.net/article/154/Shell-sort]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png]] \n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(155,'','utf-8'),(156,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n<nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif]] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif]]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif]] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n<nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\nprivate void QuickSort(int l, int r)\n {\n int[] array = promenne.pole;\n\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n</nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n<nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n</nowiki>\n\nVizualizace zde: [[http://www.algoritmy.net/article/154/Shell-sort]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png]] \n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(157,'','utf-8'),(158,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[[Soubor:http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif]] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif]]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>//////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif]]\n\n[[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif]] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [[http://www.algoritmy.net/article/154/Shell-sort]]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Merge_sort_algorithm_diagram.svg/300px-Merge_sort_algorithm_diagram.svg.png]] \n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(159,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n===== RadixSort =====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n===== MergeSort =====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(160,'','utf-8'),(161,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n11 [https://havranipapuce.varak.net/index.php?title=11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG ]\n\n[[12_Transformace_reprezentace_a_zobrazení_3D_objektů | 12 Transformace, reprezentace a zobrazení 3D objektů - IZG]] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27_Vyhledávání_a_řazení|27 Vyhledávání a řazení - IAL]]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(162,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[https://havranipapuce.varak.net/index.php?title=11 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG]\n\n[12_Transformace_reprezentace_a_zobrazení_3D_objektů 12 Transformace, reprezentace a zobrazení 3D objektů - IZG] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[27_Vyhledávání_a_řazení 27 Vyhledávání a řazení - IAL]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[38_služby_aplikační_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(163,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[https://havranipapuce.varak.net/index.php?title=11 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG]\n\n[12_Transformace_reprezentace_a_zobrazení_3D_objektů 12 Transformace, reprezentace a zobrazení 3D objektů - IZG] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[27_Vyhledávání_a_řazení 27 Vyhledávání a řazení - IAL]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_slu%C5%BEby_aplika%C4%8Dn%C3%AD_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(164,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[https://havranipapuce.varak.net/index.php?title=11 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG]\n\n[[12_Transformace_reprezentace_a_zobrazení_3D_objektů 12 Transformace, reprezentace a zobrazení 3D objektů - IZG]] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_slu%C5%BEby_aplika%C4%8Dn%C3%AD_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(165,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG]]\n\n[[12_Transformace_reprezentace_a_zobrazení_3D_objektů 12 Transformace, reprezentace a zobrazení 3D objektů - IZG]] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[https://havranipapuce.varak.net/index.php?title=27_Vyhled%C3%A1v%C3%A1n%C3%AD_a_%C5%99azen%C3%AD 27 Vyhledávání a řazení - IAL]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[https://havranipapuce.varak.net/index.php?title=38_slu%C5%BEby_aplika%C4%8Dn%C3%AD_vrstvy 38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]\n\n[https://havranipapuce.varak.net/index.php?title=39_TCP/IP_komunikace 39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(166,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek - IZG]]\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů - IZG]] \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení - IAL]]\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL]] \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA]]\n\n[[39 TCP/IP komunikace (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA]] \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(167,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(168,'Sel pstros s pstrosici a pstrosacaty Pstrosi ulici...','utf-8'),(169,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i < (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(170,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(171,'','utf-8'),(172,'\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n===Pojem: Homogení souřadnice===\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"','utf-8'),(173,'\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n===Pojem: Homogení souřadnice===\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"','utf-8'),(174,'===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"','utf-8'),(175,'','utf-8'),(176,'','utf-8'),(177,'===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]','utf-8'),(178,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\n==Posunutí==\n\n==Změna měřítka==\n\n==Rotace==\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n=Projekce=','utf-8'),(179,'','utf-8'),(180,'','utf-8'),(181,'','utf-8'),(182,'','utf-8'),(183,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi\n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(184,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(185,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nTzn. v jiných směrech než je směr osy.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(186,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nTzn. v jiných směrech než je směr osy.\n\n==Zrcadlení==\n\n-1 v diagonále\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(187,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nTzn. v jiných směrech než je směr osy.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení s posunutím\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(188,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nTzn. v jiných směrech než je směr osy.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(189,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(190,'','utf-8'),(191,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n=Projekce=','utf-8'),(192,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==','utf-8'),(193,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===','utf-8'),(194,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====','utf-8'),(195,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(196,'','utf-8'),(197,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(198,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n==Viditelnost==\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(199,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n=Ořezávání=\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(200,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(201,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11 (12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(202,'V jedné z přednášek Kršek zmínil, že je dost ostuda, když neznáte jméno toho, kdo vás zkouší, tak bych tu udělala fotky a jména a popisy lidí co budou zkoušet. :D','utf-8'),(203,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlit).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(204,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(205,'','utf-8'),(206,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(207,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(208,'','utf-8'),(209,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(210,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} a y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(211,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m>a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(212,'','utf-8'),(213,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(214,'','utf-8'),(215,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdovné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(216,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a posunutí\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(217,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==','utf-8'),(218,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(219,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n====Viditelnost hran====\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n===Plovoucí horizont===\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(220,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n====Viditelnost hran====\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n===Plovoucí horizont===\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(221,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n===Plovoucí horizont===\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(222,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(223,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(224,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(225,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Jednotlivé Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(226,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(227,'','utf-8'),(228,'','utf-8'),(229,'','utf-8'),(230,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(231,'','utf-8'),(232,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n====Testy překrývání ploch====\n\n# Překrývání průmětů na XY\n# P1 leží v přivráceném poloprostoru P2\n# Plocha P2 leží v odvráceném poloprostoru P1\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(233,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY\n# P1 leží v přivráceném poloprostoru P2\n# Plocha P2 leží v odvráceném poloprostoru P1\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(234,'','utf-8'),(235,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(236,'','utf-8'),(237,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(238,'','utf-8'),(239,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvých (color buffer).\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(240,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(241,'','utf-8'),(242,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(243,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n===Obecnost===\n\n===Úplnost===\n\n===jednoznačnost===\n\n===Unikátnost===\n\n===Přesnost===\n\n===Regulérnost===\n\n===Konzistence vůči vybraným operacím===\n\n===Kompaktnost===\n\n===Efektivnost zpracování===\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(244,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n===Obecnost===\n\n===Úplnost===\n\n===Jednoznačnost===\n\n===Unikátnost===\n\n===Přesnost===\n\n===Regulérnost===\n\n===Konzistence vůči vybraným operacím===\n\n===Kompaktnost===\n\n===Efektivnost zpracování===\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(245,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n===Obecnost===\n\n===Úplnost===\n\n===Jednoznačnost===\n\n===Unikátnost===\n\n===Přesnost===\n\n===Regulérnost===\n\n===Konzistence vůči vybraným operacím===\n\n===Kompaktnost===\n\n===Efektivnost zpracování===\n\n==Metody reprezentace==\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(246,'','utf-8'),(247,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(248,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(249,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[Soubor:Sort.exe]\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(250,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(251,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(252,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\nKirke\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(253,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 38, 29\n\n\'\'\'Hotovo\'\'\': 39, 27\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(254,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n===Obecnost===\nPopis co nejrozsáhlejší třídy objektů.\n\n===Úplnost===\nÚplně popisuje daný objekt.\n\n===Jednoznačnost===\nLze vyhodnotit pouze jedním způsobem.\n\n===Unikátnost===\nJednomu tělesu odpovídá jeden model.\n\n===Přesnost===\nPřesnost popisu objektu.\n\n===Regulérnost===\nNemožnost vytvořit nereálnou reprezentaci.\n\n===Konzistence vůči vybraným operacím===\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n===Kompaktnost===\nMalá paměťová náročnost.\n\n===Efektivnost zpracování===\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(255,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n===Obecnost===\nPopis co nejrozsáhlejší třídy objektů.\n\n===Úplnost===\nÚplně popisuje daný objekt.\n\n===Jednoznačnost===\nLze vyhodnotit pouze jedním způsobem.\n\n===Unikátnost===\nJednomu tělesu odpovídá jeden model.\n\n===Přesnost===\nPřesnost popisu objektu.\n\n===Regulérnost===\nNemožnost vytvořit nereálnou reprezentaci.\n\n===Konzistence vůči vybraným operacím===\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n===Kompaktnost===\nMalá paměťová náročnost.\n\n===Efektivnost zpracování===\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n===Šablonování===\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(256,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n===Šablonování===\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(257,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(258,'','utf-8'),(259,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(260,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\'\'Chceme vědět více?\'\'\n\n[[Soubor:Kongo.jpg]]\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(261,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(262,'','utf-8'),(263,'','utf-8'),(264,'','utf-8'),(265,'','utf-8'),(266,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(267,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel\n\n[[Soubor:Dekompozice.jpg]]\n\n===Hraniční modely===\nDrátový model\n====Level of Detai====\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(268,'','utf-8'),(269,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel\n\n[[Soubor:Dekompozice.jpg]]\n\n===Hraniční modely===\n=====B-rep=====\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(270,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel\n\n[[Soubor:Dekompozice.jpg]]\n\n===Hraniční modely===\n=====B-rep=====\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(271,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\n\'\'Chceme vědět více?\'\'\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel\n\n[[Soubor:Dekompozice.jpg]]\n\n===Hraniční modely===\n=====B-rep=====\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(272,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel\n\n[[Soubor:Dekompozice.jpg]]\n\n===Hraniční modely===\n=====B-rep=====\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(273,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n=====B-rep=====\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(274,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n=====B-rep=====\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(275,'','utf-8'),(276,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n=====B-rep=====\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\n=====Drátový model=====\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(277,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n=====B-rep=====\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(278,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n=====B-rep=====\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n=====Okřídlená hrana=====\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(279,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n=====B-rep=====\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(280,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n====B-rep====\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(281,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n= B-rep\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(282,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(283,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(284,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Osvětlení a stínování=\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n===Phongův osvětlovací model===\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(285,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(286,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n===Phongův osvětlovací model===\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(287,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n===Phongův osvětlovací model===\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(288,'','utf-8'),(289,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n===Phongův osvětlovací model===\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(290,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n<m> I_D = I_L r_D(N L)</m>\n\n===Phongův osvětlovací model===\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(291,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(292,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n<m> I_P = I_A + I_D + I_S </m>\n\n<m> I_S = I_L r_S cos alpha </m>\n\n<m> I_S = I_L r_S cos (V R)^{n_s} </m>\n\n<m> R = 2(N L) N - L </m>\n\n<m> I_A = I_a r_A = I_a r_D </m>\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(293,'','utf-8'),(294,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'); INSERT INTO `text` VALUES (295,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n===Konstantní stínování===\n===Gouraudovo stínování===\n===Phongovo stínování===\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(296,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(297,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n=====Prostor doménových adres=====\n# Hierarchické uspořádání záznamů – invertovaný strom\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény','utf-8'),(298,'','utf-8'),(299,'','utf-8'),(300,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n=====Prostor doménových adres=====\n# Hierarchické uspořádání záznamů – invertovaný strom\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# Uspořádání prostoru DNS do zón\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]','utf-8'),(301,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]','utf-8'),(302,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.','utf-8'),(303,'','utf-8'),(304,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n[[Soubor:In-addr.arpa.png]]','utf-8'),(305,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\nc \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n[[Soubor:In-addr.arpa.png]]\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n## Obsahuje úplné záznamy o doménách, které spravuje\n## Záznamy uloženy lokálně v souboru\n## Pokytuje autoritativní (tj. vždy správné) odpovědi\n## Pro každou doménu právě jeden \n======sekundární======\n## Získává data od primárního serveru\n## Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n## Také autoritativní pro danou doménu\n======záložný======\n## Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n## Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n## Poskytuje neautoritativní odpovědi','utf-8'),(306,'','utf-8'),(307,'','utf-8'),(308,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\nc \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n[[Soubor:In-addr.arpa.png]]\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n## Obsahuje úplné záznamy o doménách, které spravuje\n## Záznamy uloženy lokálně v souboru\n## Pokytuje autoritativní (tj. vždy správné) odpovědi\n## Pro každou doménu právě jeden \n======Sekundární======\n## Získává data od primárního serveru\n## Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n## Také autoritativní pro danou doménu\n======Záložný======\n## Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n## Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n## Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování','utf-8'),(309,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n## Obsahuje úplné záznamy o doménách, které spravuje\n## Záznamy uloženy lokálně v souboru\n## Pokytuje autoritativní (tj. vždy správné) odpovědi\n## Pro každou doménu právě jeden \n======Sekundární======\n## Získává data od primárního serveru\n## Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n## Také autoritativní pro danou doménu\n======Záložný======\n## Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n## Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n## Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování','utf-8'),(310,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování','utf-8'),(311,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání','utf-8'),(312,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání','utf-8'),(313,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n----\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n----\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n2. Identifikace klienta\n3. Přenos zprávy\n4. Ukončení komunikace\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta','utf-8'),(314,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n----\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n2. Identifikace klienta\n3. Přenos zprávy\n4. Ukončení komunikace\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta','utf-8'),(315,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n2. Identifikace klienta\n3. Přenos zprávy\n4. Ukončení komunikace\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta','utf-8'),(316,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta','utf-8'),(317,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n=====Skype===== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n=====IP telefonie=====\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n \n=====Klasická telefonní síť (PSTN)=====\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n\'\'\'Výhody klasické telefonní sítě:\'\'\'\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému','utf-8'),(318,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n=====Skype===== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n=====IP telefonie=====\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n----\n \n=====Klasická telefonní síť (PSTN)=====\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n\'\'\'Výhody klasické telefonní sítě:\'\'\'\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n----\n\n----','utf-8'),(319,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n=====Skype===== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n=====IP telefonie=====\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n----\n \n=====Klasická telefonní síť (PSTN)=====\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n\'\'\'Výhody klasické telefonní sítě:\'\'\'\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n----','utf-8'),(320,'','utf-8'),(321,'','utf-8'),(322,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n\'\'\'Výhody klasické telefonní sítě:\'\'\'\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n====Architektura====\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n\'\'\'Vytváření hovoru:\'\'\'\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n----','utf-8'),(323,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n----','utf-8'),(324,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n----','utf-8'),(325,'','utf-8'),(326,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\n===3D plochy===\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(327,'','utf-8'),(328,'','utf-8'),(329,'','utf-8'),(330,'','utf-8'),(331,'','utf-8'),(332,'','utf-8'),(333,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n[[Soubor:kodeky.png]]\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:mos.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\nE-model\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(334,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:mos.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\nE-model\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(335,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:mos.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\nE-model\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(336,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(337,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n- Prostor doménových adres\n- DNS servery\n- Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(338,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 29\n\n\'\'\'Hotovo\'\'\': 39, 27, 38\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n1 Princip činnosti polovodičových prvků (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n2 Kombinační logické obvody (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n3 Sekvenční logické obvody (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n4 Hierarchie paměti v počítači (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n5 Vestavěné systémy (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n6 Principy řízení a připojování periferních zařízení (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n7 Princip činnosti počítače (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n8 Minimalizace logických výrazů (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n10 Principy VHDL (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n13 Principy grafických uživatelských rozhraní (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n14 Spektrální analýza spojitých a diskrétních signálů - ISS \n\n15 Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n16 Množiny, relace a zobrazení - IDA \n\n17 Diferenciální a integrální počet funkcí více proměnných - IMA \n\n18 Číselné soustavy a převody mezi nimi - IAS \n\n19 Boolovy algebry - IDA \n\n20 Regulární jazyky a jejich modely (konečné automaty, regulární výrazy) - IFJ \n\n21 Bezkontextové jazyky a jejich modely (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n22 Struktura překladače a charakteristika fází překladu (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n23 Numerické metody a matematická pravděpodobnost (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n24 Řešení úloh (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n25 Principy modelování a simulace systémů (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n26 Datové a řídicí struktury - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n28 HTML a Javascript (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n30 Životní cyklus softwaru (charakteristika etap a základních modelů) - IUS, IIS \n\n31 Jazyk UML - IUS, IDS, IIS \n\n32 Konceptuální modelování a návrh relační databáze - IUS, IDS, IIS \n\n33 Relační datový model a jazyk SQL - IUS, IDS \n\n34 Principy a struktury správy souborů a správy paměti - IOS \n\n35 Plánování a synchronizace procesů, transakce - IOS, IIS \n\n36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n37 Programování v jazyku symbolických instrukcí (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n40 Směrování a filtrování dat v Internetu (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(339,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(340,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\'\'\'Příklady složitostí\'\'\':\n\nTheta(1) – konstantní \n\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n \nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího','utf-8'),(341,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\'\'\'Příklady složitostí\'\'\':\n\nTheta(1) – konstantní \n\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n \nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího','utf-8'),(342,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího','utf-8'),(343,'','utf-8'),(344,'','utf-8'),(345,'','utf-8'),(346,'','utf-8'),(347,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 29\n\n\'\'\'Hotovo\'\'\': 39, 27, 38\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW)]] - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(348,'Asheara','utf-8'),(349,'Asheara','utf-8'),(350,'Asheara','utf-8'),(351,'Asheara','utf-8'),(352,'Asheara','utf-8'),(353,'Asheara','utf-8'),(354,'Asheara','utf-8'),(355,'Asheara','utf-8'),(356,'Asheara','utf-8'),(357,'Kirke','utf-8'),(358,'Suave','utf-8'),(359,'Suave','utf-8'),(360,'Suave','utf-8'),(361,'Suave','utf-8'),(362,'Suave','utf-8'),(363,'Kirke','utf-8'),(364,'Suave','utf-8'),(365,'Suave','utf-8'),(366,'Suave','utf-8'),(367,'Suave','utf-8'),(368,'Suave','utf-8'),(369,'Suave','utf-8'),(370,'Asheara','utf-8'),(371,'Kirke','utf-8'),(372,'Kirke','utf-8'),(373,'Kirke','utf-8'),(374,'Kirke','utf-8'),(375,'Kirke','utf-8'),(376,'Kirke','utf-8'),(377,'Kirke','utf-8'),(378,'Kirke','utf-8'),(379,'Kirke','utf-8'),(380,'Asheara','utf-8'),(381,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 40\n\n\'\'\'Zpracovává se\'\'\': 11, 12, 29\n\n\'\'\'Hotovo\'\'\': 39, 27, 38\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 38, 40) \n\n\'\'\'Kirke\'\'\' \n \n27 (10, 18, 26, 28, 29, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(382,'Kdo tohle bude delat? :-O','utf-8'),(383,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 40\n\n\'\'\'Zpracovává se\'\'\':\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 40) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(384,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(385,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící ,atocí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n===beziérovy plochy===\nWTF????\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(386,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 0) nebo jeslti se jedná o vektor (w = 1).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící ,atocí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(387,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložný======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(388,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese \n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(389,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# Koncová zařízení (edge devices) – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# Lokální smyčka (local loop) – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# Přepínače či ústředny (switches)\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# Páteřní spoje (trunks) – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(390,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D plinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící ,atocí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(391,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící ,atocí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(392,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(393,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(394,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transofrmačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(395,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(396,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(397,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(398,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\nobr\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(399,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 40\n\n\'\'\'Zpracovává se\'\'\': 40\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 40) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(400,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# garantovaná šířka pásma a spolehlivý přenos – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# dobrá kvalita přenosu u digitálních ústředen – signál se kóduje\n# napájení – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# spolehlivost, bezchybnost – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# další služby – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(401,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# zavedené standardy\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(402,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# cena – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# mobilita – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# centrální správa systému\n# rozšířené vlastnosti telefonů a ústředen VoIP\n# přenos hlasu nad IP – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(403,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# Přenosové pásmo, kvalita signálu – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# Spolehlivost sítě – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# Integrace s veřejnou telefonní sítí PSTN – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(404,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(405,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(406,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\nId – vyjadřuje zkreslení způsobené zpožděním a echo\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(407,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX)\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\n\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\n\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\n\nId – vyjadřuje zkreslení způsobené zpožděním a echo\n\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(408,'','utf-8'),(409,'','utf-8'),(410,'','utf-8'),(411,'','utf-8'),(412,'','utf-8'),(413,'','utf-8'),(414,'','utf-8'),(415,'','utf-8'),(416,'','utf-8'),(417,'','utf-8'),(418,'==Filtrování paketů==\n=====Filtrovací pravidla=====\n# Slouží pro filtrování vstupního a výstupního provozu\n# Kontrolují provoz (data propustí nebo zablokují (roztřídit a nad každou skupinou provést nějaké pravidlo)\n# Filtruje se nejčastěji podle: čísla protokolu, zdrojové/cílové IP, zdrojový/cílový port...\n[[Soubor:Packet_filter.png]]\n\n# Když přichází paket do zařízení, tak zjiťujeme zda tam ten paket patří a jestli je tm nějaký vstupní filtr. Pokud jsou pravidla nastavené na routru, paket se porovná s filtrovacími pravidly, a podle toho se buď pošle dál, nebo se zlikviduje. Pokud je povolený, postupuje dál do počítače. Tam se zpracovává, hledá se ve směrovací tabulce nejlepší shoda cílové adresy paketu. Pokus se položka nejde, začne se zpracovávat, jinak se zahodí.\n\n=====Formát filtrovacích pravidel=====\n<number> <action> <protocol> from <src IP> to <dst IP> [src-port <src port>] [dst-port <dst port>] [<flags>] [<options>]\n\nNapř.:\n\n10 permit TCP from 147.229.0.0 to any dst-port 80 (povolení internetového provozu)\n\n30 permit UDP from any to 147.229.0.0 src-port 53 (přijímání odpovědí DNS)\n\n# Záleží na pořadí, protože se vybírá první vyhovující, a ne nejlepší vyhovující\n# Pravidla jsou od nejkonkrétnějšího po nejobecnější\n\n----\n\n==Firewally==\n\'\'\'Typy:\'\'\'\n\n\'\'\'Filtrování paketů (packet filtering)\'\'\' – kontrola jednotlivých paketů\n\n\'\'\'Stavové filtrování (stateful filtering)\'\'\' – kontrola TCP toku (SYN, ACK) – pomalší než packet filtering, může mít více kritérií a pamatuje si historii, co se využívá hlavně proti útokům typu SYN attack atp. -> kontroluje zda pakety přichází v pořadí, jakém by měli, podle sekvenčních čísel\n\n\'\'\'Aplikační brána (Application gateway)\'\'\' – na úrovni aplikací, kontroluje aplikační protokol, zda neobsahuje něco co nemá, pro každý protokol musím mít podporu v aplikační bráně\n\n======Inkluzivní přístup ======\n# většina firewallových pravidel\n# Povoluje jen služby, které splňují pravidla, ostatní blokuje\n# Bezpečnější než exkluzivní přístup (propustí všechno, co není zakázané)\n\n======Stavové filtrování======\n# Provoz považován za dvousměrnou výměnu paketů v rámci relace\n# Keep-state, kt. udržuje stavové informaceo daném spojení – existuje tabulka spojení, která nám říká, která spojení chceme nadále udržovat\n# Keep-state automaticky generuje interní pravidla pro každý očekávaný paket v této relaci. To pravidlo tam existuje tak dlouho, dokud chodí pakety jedním směrem, čímž se obnovuje timeout, nebo dokud vyprší timeout. Timeouty se liší od protokolu\n\'\'\'Činnost stavového filtrování:\'\'\'\n\n1. Odcházející paket se zkontroluje v dynamické stavové tabulce\n\n# Pokud paket odpovídá očekávanému paketu relace (TCP) prochází. Stav relace je v tabulce aktualizován\n# Ostatní pakety se kontrolují podle výstupních pravidel\n2. Podobně pro přicházející pakety\n\n3. Po ukončení se zruší informace z dynamické stavové tabulky\n\n\n\n======Aplikace filtrování======\n\'\'\'Firewally\'\'\'\n# Filtrování provozu\n# Zahazování, propuštění definovaného provozu\n\'\'\'Detekční systémy IDS (Intrusion detection systems)\'\'\'\n# Pracují jako firewally, když dojde k nějaké akci, tak si ji zalogují, příp. pošlou e-mail\n# Mohou vyhledávat nejen na základě pravidel, ale i obsahu paketů (nejen hlavičky)\n# Vyhledávají na základě signatur (hledají řetězce nebezpečného chování)\n## kontrola provozu, monitorování dat\n## detekce útoků, neočekávaného chování\n## detekce na základě signatur či chování\n\'\'\'Prevenční systémy IPS (Intrusion prevention systems)\'\'\'\n# Reakce na útok -> odklonění či odfiltrování provozu\n\n----\n\n==Klasifikace paketů==\n\'\'\'Algoritmický problém:\'\'\'\n# Snažíme se roztřídit zprávy (pakety) podle zadaných pravidel\n# Cílem je co nejrychleji vyhledat ke každému příchozímu paketu pravidlo, jehož položky se shodují s hodnotami hlavičce paketu\n\n\'\'\'Má dvě fáze:\'\'\'\n# \'\'\'Předzpracování (pre-processing)\'\'\' – příprava a uspořádání databáze filtrovacích pravidel do datových struktur optimalizovaných pro vyhledávání\n# \'\'\'Klasifikace\'\'\' - dochází ke zpracování příchozího provozu a vyhledání dat z hlavičky paketu potřebných ke klasifikaci. Poté procházíme datovou struktorou pravidel, která byla vytvořena ve fázi předzpracování. Hodnoty z hlavičky paketu se porovnávají s hdnotami pravidel a hledá se nejlepší klasifikační pravidlo.\n\n\'\'\'Paket obsahuje K hlaviček (dimenzí):\'\'\'\n# \'\'\'Dimenze\'\'\' – typ hlavičky, kterou zkoumám – pokud zkoumám podle IP odesílatele, IP cíle, portu odesílatele, portu cíle, typu protokolu, tak mám 5 dimenzí\n\n\'\'\'Klasifikátor\'\'\' se skádá z pravidel R = {R1, R2, …, Rn} – množina pravidel, každé pravidlo obsahuje n-tici, která obsahuje K položek (počet dimenzí). Ne každá položka musí být vyplněna. Např. R1 = (147.229.*.*,*,25,*,*)\n\n----\n\n\'\'\'Typy porovnání:\'\'\'\n# Přesné porovnání (exact match)\n# Porovnání prefixu (prefix match)\n# Intervalové porovnání (range match)\n# Porovnání regulárního výrazu (regular expression match)\n\n====Typy vyhledávání====\n\'\'\'Podle dimenzí (počtu kontrolovaných polí v hlavičce):\'\'\'\n# Vyhledávání v jedné dimenzi (1D)\n# Vyhledávání ve dvou dimenzích (2D)\n# Vyhledávání ve více dimenzích (nD)\n\'\'\'Podle techniky vyhledávání:\'\'\'\n# Lineární vyhledávání (linear search)\n# Vyhledávání technikou rozděl a panuj (divide and conquer)\n# Stromové vyhledávání (tries, grid of tries)\n# Použití bitového vektoru (bit vector)\n# Vyhledávání pomocí vektorového součinu (cross producting)\n# Rozhodovací stromy (decision trees)\n\n\n\n\'\'\'Vyhledávání ve více dimenzích\'\'\'\n\n\'\'\'Vyhledávání podle více kritérií (položek hlavičky)\'\'\'\n# Časově i prostorově náročné – potřeba zvolit kompromisy\n# Ne všechny položky se stejně často používají\n# Metody se většinou zaměřují na optimální vyhledávání ve 2D\n\'\'\'Předpoklady pro použití heuristických metod:\'\'\'\n# Prefixy IP adres se porovnávají do maximálně 24 bitů\n# Průnik prefixů není obvyklý (zřídka např. 00* a 0001*)\n# Intervaly se v praxi příliš nepoužívají\n\n\n----\n\n=====Lineární vyhledávání=====\n# Nejjednodušší způsob klasifikace\n# Časová složitost O(N*K)\n# Vhodné pro malý počet pravidel\n# Postup: projdi postupně všechna pravidla z R a porovnej hodnoty ve všech dimenzích\n======Lineární vyhledávání ve více dimenzích======\n\'\'\'Lineární seznam pravidel\'\'\'\n# Preference dvojic (S, D)(zdrojová IP, cílová IP)\n# Kombinace 2D klasifikace + lineární průchod v dalších dimenzích\n# Každé pravidlo reprezentováno pouze jednou\n\n[[Soubor:linearni.png]]\n\n# Pro reprezentaci k-rozměrných pravidel použijeme vhodnou 2D reprezentaci (např. síť stromů trie), na kterou navážeme pro různé dvojice (S, D) lineární seznam pravidel, které odpovídají daným hodnotám (S, D) v pravidle\n\n\n----\n\n=====Stromové vyhledávání=====\n# Stromová struktura trie (prefixové vyhledávání)\n# Binární srromová struktura pro klasifikaci jedné dimenze (IP adresy)\n# Uzel označuje bit prefixu, cesta z uzlu Px ke kořeni tvoří prefix\n# Snadné procházení, vkládání, rušení\n\n[[Soubor:Trie_prefixy.png]]\n\n# Rychlé vyhledávání. Složitější je, že na počátku je potřebné z těchto pravidel vybudovat strom, což ale lze udělat offline\n# \'\'\'Přidání pravidla\'\'\' \n## přidání větev, uzlů, označení pravidla\n# \'\'\'Rušení pravidla\'\'\' \n## pokud je listem, zruším všechny uzly až po ten, ktrý se ještě využívá\n## pokud není, zruší se jen označení (např. P1)\n# Pokud procházením stromem skončím na pravidle, použiju ho, jinak se backtrackingem vrátím na předchozí vyhovující pravidlo\n\n\n\n======Rozšíření trie do dvou dimenzí======\n# Pro každou dimenzi strom trie – postupné vyhledávání\n# Exponenciální nárust prostorové složitosti O (N^k) – duplicita stromů\n[[Soubor:Trie_rozsireni.png]]\n\n\n\n======Grid of tries bez duplicit, se zpětným vyhledáváním======\n# Menší prostorová složitost (bez duplicit), větší časová náročnost\n# Použití algoritmu zpětného vyhledávání (backtracking)\n# Konstrukce stromu je jednodušší, ale je složitější vyhledávání (musí se vracet)\n[[Soubor:Trie_backtracking.png]]\n\n\n\n======Grid of tries se zpětným vyhledáváním a ukazateli======\n# Pro každý bod v srcTrie přepočítá ukazatel na další možný strom\n# Snížení časové složitosti – rychlejší průchod stromem\n# Vyhledání prefixu (001, 001)(D,S) – při neúspěchu v x přechod na y\n# Měly bychom být schopné na základě pravidel vytvořit strom\n[[Soubor:Trie_ukazatele.png]]\n\n----\n\n=====Metody typu rozděl a panuj=====\n# Využívá myšlenku rozdělení problému na jednodušší podčásti, které se zpracují nezávisle a celkový výsledek se složí z dílčích výsledků\n# Prohledává jednotlivé množiny (dimenze) pomocí efektivních jednodimenzionálních metod\n# \'\'\'Tři způsoby implementace této metody:\'\'\'\n## Lineární prohledávání pomocí bitového vektoru\n## Použití kartézského součinu\n## Metoda rekurzivní klasifikace toků\n\n======Lineární vyhledávání pomocí bitového vektoru======\n# Bitový vektor obsahuje výskyt prefixu v množině pravidel\n# Celkový bitový vektor je průnikem dílčích výsledků (bitový AND)\n# Touhle metodou je možné zpracovávat paralelně\n\n[[Soubor:Bit_vector.png]]\n\nPříklad: vyhledání H = (147.229.5.1, 147.228.15.1, 53, 1029, UDP)\n\n111011, 111001, 010011, 111011, 110111 = 010001\n\n\n\n======Klasifikace pomocí kartézského součinu======\n# Vytvoří vhodné datové struktury pro hledání v jednotlivých množinách\n# Tyto struktury (např. jednodimenzionální stromy trie) provádějí nejdelší prefixovou shodu nad odpovídajícími položkami z hlavičky paketu\n# Abychom určili nejlepší prefixové pravidlo, musíme vytvořit tabulku kartézského součinu\n# Tato tabulka obsahuje pro každý vektor kartézského součinu předpočítané pravidlo pro nejlepší shodu\n\n[[Soubor:Kartez_soucin1.png]]\n\n# Pokud klasifikátor neobsahuje univerzální pravidlo (*,*,*,*,*), může se stát, že pro daou kombinaci položek vektoru neexistuje žádné pravidlo\n# Pokud neexistuje žádné vyhovující klasifikační pravidlo pro vektor, jedná se o tzv. prázdný kartézský součin\n# Prefixové vyhledávání v jednotlivých dimenzích lze implementovat paralelně\n\n[[Soubor:Kartez_soucin2.png]]\n\n# Exponenciální nárust prostorové složitosti talbulky\n# V nejhorším případě N^k, kde k je počet dimenzí a N počet prvků\n\n\n\n======Metoda rekurzivní klasifikace toků======\n# Rozšířením metody kartézského součinu v kombinaci s bitovým vektorem\n# Řeší exponenciální nárust záznamů při použití kartézského součinu\n# Mnohé kombinace prefixů jednotlivých dimenzí (vektorů) odpovídají stejné množině klasifikačních pravidel\n# Ty vektory, které mají stejné pravidla, tvoří třídu ekvivalence\n# Princip této metody je založen na výpočtu dílčích kartézských součinů nad třídami ekvivalence\n# Celkový výsledek netvoříme skládáním dílčích kartézských součinů, ale kombinací vypočtených tříd ekvivalence -> významně se tím redukují paměťové nároky\n\n[[Soubor:Rekurzivni_klasifikace.png]]','utf-8'),(419,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středu 20.2. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27),\n \n\'\'zbývá\'\': 20.2.(S,KAS), 27.2.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 40\n\n\'\'\'Zpracovává se\'\'\': 40, 13\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 40) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(420,'komunikační kanály\n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(421,'','utf-8'),(422,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném č�ase, reprodukovatelné a pokud možno nezkreslené�.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena př�íslušných periferních za�řízení.\n\n==Smysly/média pro přenos informace==\n\nObraz\n\nHmat\n\nZvuk\n\nČich\n\n[[Soubor:Smysly.jpg]]\n\n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(423,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude v pátek 1.3. u Kirke!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12)\n \n\'\'zbývá\'\': 1.3.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 40\n\n\'\'\'Zpracovává se\'\'\': 40, 13, 30\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 40) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(424,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude v pátek 1.3. u Kirke!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12)\n \n\'\'zbývá\'\': 1.3.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 40, 13, 30\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25, 40) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(425,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n\nObraz\n\nHmat\n\nZvuk\n\nČich\n\n[[Soubor:Smysly.jpg]]\n\n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(426,'','utf-8'),(427,'','utf-8'),(428,'','utf-8'),(429,'','utf-8'),(430,'','utf-8'),(431,'','utf-8'),(432,'==Filtrování paketů==\n=====Filtrovací pravidla=====\n# Slouží pro filtrování vstupního a výstupního provozu\n# Kontrolují provoz (data propustí nebo zablokují (roztřídit a nad každou skupinou provést nějaké pravidlo)\n# Filtruje se nejčastěji podle: čísla protokolu, zdrojové/cílové IP, zdrojový/cílový port...\n[[Soubor:Packet_filter.png]]\n\n# Když přichází paket do zařízení, tak zjiťujeme zda tam ten paket patří a jestli je tm nějaký vstupní filtr. Pokud jsou pravidla nastavené na routru, paket se porovná s filtrovacími pravidly, a podle toho se buď pošle dál, nebo se zlikviduje. Pokud je povolený, postupuje dál do počítače. Tam se zpracovává, hledá se ve směrovací tabulce nejlepší shoda cílové adresy paketu. Pokus se položka nejde, začne se zpracovávat, jinak se zahodí.\n\n=====Formát filtrovacích pravidel=====\n<number> <action> <protocol> from <src IP> to <dst IP> [src-port <src port>] [dst-port <dst port>] [<flags>] [<options>]\n\nNapř.:\n\n10 permit TCP from 147.229.0.0 to any dst-port 80 (povolení internetového provozu)\n\n30 permit UDP from any to 147.229.0.0 src-port 53 (přijímání odpovědí DNS)\n\n# Záleží na pořadí, protože se vybírá první vyhovující, a ne nejlepší vyhovující\n# Pravidla jsou od nejkonkrétnějšího po nejobecnější\n\n----\n\n==Firewally==\n\'\'\'Typy:\'\'\'\n\n\'\'\'Filtrování paketů (packet filtering)\'\'\' – kontrola jednotlivých paketů\n\n\'\'\'Stavové filtrování (stateful filtering)\'\'\' – kontrola TCP toku (SYN, ACK) – pomalší než packet filtering, může mít více kritérií a pamatuje si historii, co se využívá hlavně proti útokům typu SYN attack atp. -> kontroluje zda pakety přichází v pořadí, jakém by měli, podle sekvenčních čísel\n\n\'\'\'Aplikační brána (Application gateway)\'\'\' – na úrovni aplikací, kontroluje aplikační protokol, zda neobsahuje něco co nemá, pro každý protokol musím mít podporu v aplikační bráně\n\n======Inkluzivní přístup ======\n# většina firewallových pravidel\n# Povoluje jen služby, které splňují pravidla, ostatní blokuje\n# Bezpečnější než exkluzivní přístup (propustí všechno, co není zakázané)\n\n======Stavové filtrování======\n# Provoz považován za dvousměrnou výměnu paketů v rámci relace\n# Keep-state, kt. udržuje stavové informaceo daném spojení – existuje tabulka spojení, která nám říká, která spojení chceme nadále udržovat\n# Keep-state automaticky generuje interní pravidla pro každý očekávaný paket v této relaci. To pravidlo tam existuje tak dlouho, dokud chodí pakety jedním směrem, čímž se obnovuje timeout, nebo dokud vyprší timeout. Timeouty se liší od protokolu\n\'\'\'Činnost stavového filtrování:\'\'\'\n\n1. Odcházející paket se zkontroluje v dynamické stavové tabulce\n\n# Pokud paket odpovídá očekávanému paketu relace (TCP) prochází. Stav relace je v tabulce aktualizován\n# Ostatní pakety se kontrolují podle výstupních pravidel\n2. Podobně pro přicházející pakety\n\n3. Po ukončení se zruší informace z dynamické stavové tabulky\n\n\n\n======Aplikace filtrování======\n\'\'\'Firewally\'\'\'\n# Filtrování provozu\n# Zahazování, propuštění definovaného provozu\n\'\'\'Detekční systémy IDS (Intrusion detection systems)\'\'\'\n# Pracují jako firewally, když dojde k nějaké akci, tak si ji zalogují, příp. pošlou e-mail\n# Mohou vyhledávat nejen na základě pravidel, ale i obsahu paketů (nejen hlavičky)\n# Vyhledávají na základě signatur (hledají řetězce nebezpečného chování)\n## kontrola provozu, monitorování dat\n## detekce útoků, neočekávaného chování\n## detekce na základě signatur či chování\n\'\'\'Prevenční systémy IPS (Intrusion prevention systems)\'\'\'\n# Reakce na útok -> odklonění či odfiltrování provozu\n\n----\n\n==Klasifikace paketů==\n\'\'\'Algoritmický problém:\'\'\'\n# Snažíme se roztřídit zprávy (pakety) podle zadaných pravidel\n# Cílem je co nejrychleji vyhledat ke každému příchozímu paketu pravidlo, jehož položky se shodují s hodnotami hlavičce paketu\n\n\'\'\'Má dvě fáze:\'\'\'\n# \'\'\'Předzpracování (pre-processing)\'\'\' – příprava a uspořádání databáze filtrovacích pravidel do datových struktur optimalizovaných pro vyhledávání\n# \'\'\'Klasifikace\'\'\' - dochází ke zpracování příchozího provozu a vyhledání dat z hlavičky paketu potřebných ke klasifikaci. Poté procházíme datovou struktorou pravidel, která byla vytvořena ve fázi předzpracování. Hodnoty z hlavičky paketu se porovnávají s hdnotami pravidel a hledá se nejlepší klasifikační pravidlo.\n\n\'\'\'Paket obsahuje K hlaviček (dimenzí):\'\'\'\n# \'\'\'Dimenze\'\'\' – typ hlavičky, kterou zkoumám – pokud zkoumám podle IP odesílatele, IP cíle, portu odesílatele, portu cíle, typu protokolu, tak mám 5 dimenzí\n\n\'\'\'Klasifikátor\'\'\' se skádá z pravidel R = {R1, R2, …, Rn} – množina pravidel, každé pravidlo obsahuje n-tici, která obsahuje K položek (počet dimenzí). Ne každá položka musí být vyplněna. Např. R1 = (147.229.*.*,*,25,*,*)\n\n----\n\n\'\'\'Typy porovnání:\'\'\'\n# Přesné porovnání (exact match)\n# Porovnání prefixu (prefix match)\n# Intervalové porovnání (range match)\n# Porovnání regulárního výrazu (regular expression match)\n\n====Typy vyhledávání====\n\'\'\'Podle dimenzí (počtu kontrolovaných polí v hlavičce):\'\'\'\n# Vyhledávání v jedné dimenzi (1D)\n# Vyhledávání ve dvou dimenzích (2D)\n# Vyhledávání ve více dimenzích (nD)\n\'\'\'Podle techniky vyhledávání:\'\'\'\n# Lineární vyhledávání (linear search)\n# Vyhledávání technikou rozděl a panuj (divide and conquer)\n# Stromové vyhledávání (tries, grid of tries)\n# Použití bitového vektoru (bit vector)\n# Vyhledávání pomocí vektorového součinu (cross producting)\n# Rozhodovací stromy (decision trees)\n\n\n\n\'\'\'Vyhledávání ve více dimenzích\'\'\'\n\n\'\'\'Vyhledávání podle více kritérií (položek hlavičky)\'\'\'\n# Časově i prostorově náročné – potřeba zvolit kompromisy\n# Ne všechny položky se stejně často používají\n# Metody se většinou zaměřují na optimální vyhledávání ve 2D\n\'\'\'Předpoklady pro použití heuristických metod:\'\'\'\n# Prefixy IP adres se porovnávají do maximálně 24 bitů\n# Průnik prefixů není obvyklý (zřídka např. 00* a 0001*)\n# Intervaly se v praxi příliš nepoužívají\n\n\n----\n\n=====Lineární vyhledávání=====\n# Nejjednodušší způsob klasifikace\n# Časová složitost O(N*K)\n# Vhodné pro malý počet pravidel\n# Postup: projdi postupně všechna pravidla z R a porovnej hodnoty ve všech dimenzích\n======Lineární vyhledávání ve více dimenzích======\n\'\'\'Lineární seznam pravidel\'\'\'\n# Preference dvojic (S, D)(zdrojová IP, cílová IP)\n# Kombinace 2D klasifikace + lineární průchod v dalších dimenzích\n# Každé pravidlo reprezentováno pouze jednou\n\n[[Soubor:linearni.png]]\n\n# Pro reprezentaci k-rozměrných pravidel použijeme vhodnou 2D reprezentaci (např. síť stromů trie), na kterou navážeme pro různé dvojice (S, D) lineární seznam pravidel, které odpovídají daným hodnotám (S, D) v pravidle\n\n\n----\n\n=====Stromové vyhledávání=====\n# Stromová struktura trie (prefixové vyhledávání)\n# Binární srromová struktura pro klasifikaci jedné dimenze (IP adresy)\n# Uzel označuje bit prefixu, cesta z uzlu Px ke kořeni tvoří prefix\n# Snadné procházení, vkládání, rušení\n\n[[Soubor:Trie_prefixy.png]]\n\n# Rychlé vyhledávání. Složitější je, že na počátku je potřebné z těchto pravidel vybudovat strom, což ale lze udělat offline\n# \'\'\'Přidání pravidla\'\'\' \n## přidání větev, uzlů, označení pravidla\n# \'\'\'Rušení pravidla\'\'\' \n## pokud je listem, zruším všechny uzly až po ten, ktrý se ještě využívá\n## pokud není, zruší se jen označení (např. P1)\n# Pokud procházením stromem skončím na pravidle, použiju ho, jinak se backtrackingem vrátím na předchozí vyhovující pravidlo\n\n\n\n======Rozšíření trie do dvou dimenzí======\n# Pro každou dimenzi strom trie – postupné vyhledávání\n# Exponenciální nárust prostorové složitosti O (N^k) – duplicita stromů\n[[Soubor:Trie_rozsireni.png]]\n\n\n\n======Grid of tries bez duplicit, se zpětným vyhledáváním======\n# Menší prostorová složitost (bez duplicit), větší časová náročnost\n# Použití algoritmu zpětného vyhledávání (backtracking)\n# Konstrukce stromu je jednodušší, ale je složitější vyhledávání (musí se vracet)\n[[Soubor:Trie_backtracking.png]]\n\n\n\n======Grid of tries se zpětným vyhledáváním a ukazateli======\n# Pro každý bod v srcTrie přepočítá ukazatel na další možný strom\n# Snížení časové složitosti – rychlejší průchod stromem\n# Vyhledání prefixu (001, 001)(D,S) – při neúspěchu v x přechod na y\n# Měly bychom být schopné na základě pravidel vytvořit strom\n[[Soubor:Trie_ukazatele.png]]\n\n----\n\n=====Metody typu rozděl a panuj=====\n# Využívá myšlenku rozdělení problému na jednodušší podčásti, které se zpracují nezávisle a celkový výsledek se složí z dílčích výsledků\n# Prohledává jednotlivé množiny (dimenze) pomocí efektivních jednodimenzionálních metod\n# \'\'\'Tři způsoby implementace této metody:\'\'\'\n## Lineární prohledávání pomocí bitového vektoru\n## Použití kartézského součinu\n## Metoda rekurzivní klasifikace toků\n\n======Lineární vyhledávání pomocí bitového vektoru======\n# Bitový vektor obsahuje výskyt prefixu v množině pravidel\n# Celkový bitový vektor je průnikem dílčích výsledků (bitový AND)\n# Touhle metodou je možné zpracovávat paralelně\n\n[[Soubor:Bit_vector.png]]\n\nPříklad: vyhledání H = (147.229.5.1, 147.228.15.1, 53, 1029, UDP)\n\n111011, 111001, 010011, 111011, 110111 = 010001\n\n\n\n======Klasifikace pomocí kartézského součinu======\n# Vytvoří vhodné datové struktury pro hledání v jednotlivých množinách\n# Tyto struktury (např. jednodimenzionální stromy trie) provádějí nejdelší prefixovou shodu nad odpovídajícími položkami z hlavičky paketu\n# Abychom určili nejlepší prefixové pravidlo, musíme vytvořit tabulku kartézského součinu\n# Tato tabulka obsahuje pro každý vektor kartézského součinu předpočítané pravidlo pro nejlepší shodu\n\n[[Soubor:Kartez_soucin1.png]]\n\n# Pokud klasifikátor neobsahuje univerzální pravidlo (*,*,*,*,*), může se stát, že pro daou kombinaci položek vektoru neexistuje žádné pravidlo\n# Pokud neexistuje žádné vyhovující klasifikační pravidlo pro vektor, jedná se o tzv. prázdný kartézský součin\n# Prefixové vyhledávání v jednotlivých dimenzích lze implementovat paralelně\n\n[[Soubor:Kartez_soucin2.png]]\n\n# Exponenciální nárust prostorové složitosti talbulky\n# V nejhorším případě N^k, kde k je počet dimenzí a N počet prvků\n\n\n\n======Metoda rekurzivní klasifikace toků======\n# Rozšířením metody kartézského součinu v kombinaci s bitovým vektorem\n# Řeší exponenciální nárust záznamů při použití kartézského součinu\n# Mnohé kombinace prefixů jednotlivých dimenzí (vektorů) odpovídají stejné množině klasifikačních pravidel\n# Ty vektory, které mají stejné pravidla, tvoří třídu ekvivalence\n# Princip této metody je založen na výpočtu dílčích kartézských součinů nad třídami ekvivalence\n# Celkový výsledek netvoříme skládáním dílčích kartézských součinů, ale kombinací vypočtených tříd ekvivalence -> významně se tím redukují paměťové nároky\n\n[[Soubor:Rekurzivni_klasifikace.png]]\n\n==Zajištění kvality služeb==\n\n\'\'\'Přizpůsobení provozu z pohledu kvality:\'\'\'\n\n=====Značení paketů (packet marking) – klasifikace=====\n=====Omezení provozu (traffic policing)===== \n# slouží k řízení maximální rychlosti individuálního toku či agregovaných toků\n# každému toku je přiřazen odpovídající profil přenosu dat\n# profil definuje rchlostní a přenosové parametry toku\n# pokud daný tok překročí tyto parametry, jsou pakety z toku zahozeny nebo označeny nižší prioritou\n# nedochází ke zpoždění, ale za cenu ztrát\n=====Rozložení provozu (traffic shaping)=====\n# slouží k regulaci rychlosti a objemu provozu jednotlivých toků\n# rozložení provozu v čase na určitou rychlost a zajištění splnění podmínek SLA\n# rozprostře shluky paketů tak, aby nedošlo k překročení maximální povolené přenosové kapacity\n# malá ztrátovost, ale zpoždění\n[[Soubor:traffic.png]]\n\n\'\'\'Zajištění QoS na internetu\'\'\'\n# SLA – Service Level Agreement – definované požadavky zákazníka (je to dohoda). Specifikuje nároky na přenos zákaznicných dat – obvykle nárok na fyzické připojení k síti (dostupnost a propustnost)\n# Většinou, když provider přijímá data, tak na výstupu se provádí traffic shaping – rozkládám provoz tak, aby se přenášel všechen\n# Na vstupu (kde mám já zaplacené služby) se provádí marking a policing – označení vstupních paketů a ořežání špiček\n# Na základě označení to přenáším po síti, kterou mám pod kontrolou a pak na výstupu opět provedu shaping\n\n[[Soubor:Qos_net.png]]\n\n----\n\n====Plánování QoS pomocí front====\n# Fronta je abstraktní datová struktura, může být softwarová nebo hardwarová. Většinou když přichází data, ukládají se do HW fronty a potom se překlasifikovávájí a ukládají do SW front\n\n\'\'\'Spracování paketu na síťovém zařízení\'\'\'\n# přijde do hw fronty a zjišťuje zda je fronta plná nebo ne. \n# Pokud je fronta plná, předává se to do sw front, pokud jsou vytvořené a čeká to tam.\n# Pokud je fronta prázdná, rovnou tojde na výstup a přeposílá se to – pokud zařízení není zahlcené, tak bez ohledu na klasifikaci pakety jdou na výstup a nedochází ke zpoždění nebo předbíhání paketů. \n# Teprve až se výstupní fronta začne zaplňovat, přicházejí ke slovu techniky sw fronty, klasifikace a způsob odbavení.\n# Pokud jsou sw fronty zahlcené, tak se to zahazuje\n# Fronty jsou seřazeny podle priority – při určitém nastavení front se může stát, že prioritnější provoz je zahazován, protože fronta nemá dostatečnou kapacitu\n\n----\n\n======Fronta typu FIFO (First In-First Out)======\n[[Soubor:fifo.png]]\n\n# Dobře se implementují\n# Řazení výstupních paketů v pořadí jak přicházejí\n# Fronta FIFO neřeší priority\n# Předvídatelné zpoždění paketů – D = B/R\n## B – velikost fronty\n## R – rychlost linky\n\n\n----\n\n======Prioritní fronty PQ (Priority Queue)======\n[[Soubor:pq.png]]\n# Více prioritních tříd – třídění závisí na přijaté politice\n# Každá třída má vlastní výstupní frontu\n# Riziko vyhladovění – dokud není prázdná prioritnější fronta, tak se neodbavují další\n# V praxi se prioritní fronty kombinují ještě s jinými frontami\n\n----\n\n======Cyklické fronty RR (Round Robin)======\n[[Soubor:rr.png]]\n# Každá fronta odpovídá jednomu toku (z celkem n)\n# Cyklická obsluha všech front\n# Rychlost obsluhy je R/n\n# V jednom cylku se z každé fronty odebere stejný počet paketů (bitů)\n# Pokud je fronta prázdná, pokračuje se obsluhou nejbližší neprázdné fronty\n\n\'\'\'Deficitní cyklické fronty\'\'\' – mají jakési počítadlo, které určuje, kolik by se mělo za dané kolečko odebrat – pokud je extra velký paket, může se čekat pár kol, než se odebere\n\n----\n\n======Váhové fronty WFQ (Weighted Fair Queue)======\n[[Soubor:wfq.png]]\n# Pro každý tok jedna fronta- dynamické vytváření a zánik\n# Váha určuje počet odebraných paketů fronty\n# Podobné jako round robin, ale je určená váha dat frokaždou frontu\n# Můžu jimi velmi přesně říct, jaké má být přenosové pásmo jakéhokoli provozu\n# Pokud mám provoz a chci dát např 50% na RTP, 20% na SIP a zbytek na webové služby, tak nastavím v tomto poměru váhy a přenosové pásmo se v tomhle poměru bude přidělovat\n# Dochází k přeskládání, ale na rozdíl od prioritních front nedochází k vyhladovění (a jistým způsobem je možné prioritu nastavit\n\n----','utf-8'),(433,'','utf-8'),(434,'','utf-8'),(435,'','utf-8'),(436,'','utf-8'),(437,'','utf-8'),(438,'==Filtrování paketů==\n=====Filtrovací pravidla=====\n# Slouží pro filtrování vstupního a výstupního provozu\n# Kontrolují provoz (data propustí nebo zablokují (roztřídit a nad každou skupinou provést nějaké pravidlo)\n# Filtruje se nejčastěji podle: čísla protokolu, zdrojové/cílové IP, zdrojový/cílový port...\n[[Soubor:Packet_filter.png]]\n\n# Když přichází paket do zařízení, tak zjiťujeme zda tam ten paket patří a jestli je tm nějaký vstupní filtr. Pokud jsou pravidla nastavené na routru, paket se porovná s filtrovacími pravidly, a podle toho se buď pošle dál, nebo se zlikviduje. Pokud je povolený, postupuje dál do počítače. Tam se zpracovává, hledá se ve směrovací tabulce nejlepší shoda cílové adresy paketu. Pokus se položka nejde, začne se zpracovávat, jinak se zahodí.\n\n=====Formát filtrovacích pravidel=====\n<number> <action> <protocol> from <src IP> to <dst IP> [src-port <src port>] [dst-port <dst port>] [<flags>] [<options>]\n\nNapř.:\n\n10 permit TCP from 147.229.0.0 to any dst-port 80 (povolení internetového provozu)\n\n30 permit UDP from any to 147.229.0.0 src-port 53 (přijímání odpovědí DNS)\n\n# Záleží na pořadí, protože se vybírá první vyhovující, a ne nejlepší vyhovující\n# Pravidla jsou od nejkonkrétnějšího po nejobecnější\n\n----\n\n==Firewally==\n\'\'\'Typy:\'\'\'\n\n\'\'\'Filtrování paketů (packet filtering)\'\'\' – kontrola jednotlivých paketů\n\n\'\'\'Stavové filtrování (stateful filtering)\'\'\' – kontrola TCP toku (SYN, ACK) – pomalší než packet filtering, může mít více kritérií a pamatuje si historii, co se využívá hlavně proti útokům typu SYN attack atp. -> kontroluje zda pakety přichází v pořadí, jakém by měli, podle sekvenčních čísel\n\n\'\'\'Aplikační brána (Application gateway)\'\'\' – na úrovni aplikací, kontroluje aplikační protokol, zda neobsahuje něco co nemá, pro každý protokol musím mít podporu v aplikační bráně\n\n======Inkluzivní přístup ======\n# většina firewallových pravidel\n# Povoluje jen služby, které splňují pravidla, ostatní blokuje\n# Bezpečnější než exkluzivní přístup (propustí všechno, co není zakázané)\n\n======Stavové filtrování======\n# Provoz považován za dvousměrnou výměnu paketů v rámci relace\n# Keep-state, kt. udržuje stavové informaceo daném spojení – existuje tabulka spojení, která nám říká, která spojení chceme nadále udržovat\n# Keep-state automaticky generuje interní pravidla pro každý očekávaný paket v této relaci. To pravidlo tam existuje tak dlouho, dokud chodí pakety jedním směrem, čímž se obnovuje timeout, nebo dokud vyprší timeout. Timeouty se liší od protokolu\n\'\'\'Činnost stavového filtrování:\'\'\'\n\n1. Odcházející paket se zkontroluje v dynamické stavové tabulce\n\n# Pokud paket odpovídá očekávanému paketu relace (TCP) prochází. Stav relace je v tabulce aktualizován\n# Ostatní pakety se kontrolují podle výstupních pravidel\n2. Podobně pro přicházející pakety\n\n3. Po ukončení se zruší informace z dynamické stavové tabulky\n\n\n\n======Aplikace filtrování======\n\'\'\'Firewally\'\'\'\n# Filtrování provozu\n# Zahazování, propuštění definovaného provozu\n\'\'\'Detekční systémy IDS (Intrusion detection systems)\'\'\'\n# Pracují jako firewally, když dojde k nějaké akci, tak si ji zalogují, příp. pošlou e-mail\n# Mohou vyhledávat nejen na základě pravidel, ale i obsahu paketů (nejen hlavičky)\n# Vyhledávají na základě signatur (hledají řetězce nebezpečného chování)\n## kontrola provozu, monitorování dat\n## detekce útoků, neočekávaného chování\n## detekce na základě signatur či chování\n\'\'\'Prevenční systémy IPS (Intrusion prevention systems)\'\'\'\n# Reakce na útok -> odklonění či odfiltrování provozu\n\n----\n\n==Klasifikace paketů==\n\'\'\'Algoritmický problém:\'\'\'\n# Snažíme se roztřídit zprávy (pakety) podle zadaných pravidel\n# Cílem je co nejrychleji vyhledat ke každému příchozímu paketu pravidlo, jehož položky se shodují s hodnotami hlavičce paketu\n\n\'\'\'Má dvě fáze:\'\'\'\n# \'\'\'Předzpracování (pre-processing)\'\'\' – příprava a uspořádání databáze filtrovacích pravidel do datových struktur optimalizovaných pro vyhledávání\n# \'\'\'Klasifikace\'\'\' - dochází ke zpracování příchozího provozu a vyhledání dat z hlavičky paketu potřebných ke klasifikaci. Poté procházíme datovou struktorou pravidel, která byla vytvořena ve fázi předzpracování. Hodnoty z hlavičky paketu se porovnávají s hdnotami pravidel a hledá se nejlepší klasifikační pravidlo.\n\n\'\'\'Paket obsahuje K hlaviček (dimenzí):\'\'\'\n# \'\'\'Dimenze\'\'\' – typ hlavičky, kterou zkoumám – pokud zkoumám podle IP odesílatele, IP cíle, portu odesílatele, portu cíle, typu protokolu, tak mám 5 dimenzí\n\n\'\'\'Klasifikátor\'\'\' se skádá z pravidel R = {R1, R2, …, Rn} – množina pravidel, každé pravidlo obsahuje n-tici, která obsahuje K položek (počet dimenzí). Ne každá položka musí být vyplněna. Např. R1 = (147.229.*.*,*,25,*,*)\n\n----\n\n\'\'\'Typy porovnání:\'\'\'\n# Přesné porovnání (exact match)\n# Porovnání prefixu (prefix match)\n# Intervalové porovnání (range match)\n# Porovnání regulárního výrazu (regular expression match)\n\n====Typy vyhledávání====\n\'\'\'Podle dimenzí (počtu kontrolovaných polí v hlavičce):\'\'\'\n# Vyhledávání v jedné dimenzi (1D)\n# Vyhledávání ve dvou dimenzích (2D)\n# Vyhledávání ve více dimenzích (nD)\n\'\'\'Podle techniky vyhledávání:\'\'\'\n# Lineární vyhledávání (linear search)\n# Vyhledávání technikou rozděl a panuj (divide and conquer)\n# Stromové vyhledávání (tries, grid of tries)\n# Použití bitového vektoru (bit vector)\n# Vyhledávání pomocí vektorového součinu (cross producting)\n# Rozhodovací stromy (decision trees)\n\n\n\n\'\'\'Vyhledávání ve více dimenzích\'\'\'\n\n\'\'\'Vyhledávání podle více kritérií (položek hlavičky)\'\'\'\n# Časově i prostorově náročné – potřeba zvolit kompromisy\n# Ne všechny položky se stejně často používají\n# Metody se většinou zaměřují na optimální vyhledávání ve 2D\n\'\'\'Předpoklady pro použití heuristických metod:\'\'\'\n# Prefixy IP adres se porovnávají do maximálně 24 bitů\n# Průnik prefixů není obvyklý (zřídka např. 00* a 0001*)\n# Intervaly se v praxi příliš nepoužívají\n\n\n----\n\n=====Lineární vyhledávání=====\n# Nejjednodušší způsob klasifikace\n# Časová složitost O(N*K)\n# Vhodné pro malý počet pravidel\n# Postup: projdi postupně všechna pravidla z R a porovnej hodnoty ve všech dimenzích\n======Lineární vyhledávání ve více dimenzích======\n\'\'\'Lineární seznam pravidel\'\'\'\n# Preference dvojic (S, D)(zdrojová IP, cílová IP)\n# Kombinace 2D klasifikace + lineární průchod v dalších dimenzích\n# Každé pravidlo reprezentováno pouze jednou\n\n[[Soubor:linearni.png]]\n\n# Pro reprezentaci k-rozměrných pravidel použijeme vhodnou 2D reprezentaci (např. síť stromů trie), na kterou navážeme pro různé dvojice (S, D) lineární seznam pravidel, které odpovídají daným hodnotám (S, D) v pravidle\n\n\n----\n\n=====Stromové vyhledávání=====\n# Stromová struktura trie (prefixové vyhledávání)\n# Binární srromová struktura pro klasifikaci jedné dimenze (IP adresy)\n# Uzel označuje bit prefixu, cesta z uzlu Px ke kořeni tvoří prefix\n# Snadné procházení, vkládání, rušení\n\n[[Soubor:Trie_prefixy.png]]\n\n# Rychlé vyhledávání. Složitější je, že na počátku je potřebné z těchto pravidel vybudovat strom, což ale lze udělat offline\n# \'\'\'Přidání pravidla\'\'\' \n## přidání větev, uzlů, označení pravidla\n# \'\'\'Rušení pravidla\'\'\' \n## pokud je listem, zruším všechny uzly až po ten, ktrý se ještě využívá\n## pokud není, zruší se jen označení (např. P1)\n# Pokud procházením stromem skončím na pravidle, použiju ho, jinak se backtrackingem vrátím na předchozí vyhovující pravidlo\n\n\n\n======Rozšíření trie do dvou dimenzí======\n# Pro každou dimenzi strom trie – postupné vyhledávání\n# Exponenciální nárust prostorové složitosti O (N^k) – duplicita stromů\n[[Soubor:Trie_rozsireni.png]]\n\n\n\n======Grid of tries bez duplicit, se zpětným vyhledáváním======\n# Menší prostorová složitost (bez duplicit), větší časová náročnost\n# Použití algoritmu zpětného vyhledávání (backtracking)\n# Konstrukce stromu je jednodušší, ale je složitější vyhledávání (musí se vracet)\n[[Soubor:Trie_backtracking.png]]\n\n\n\n======Grid of tries se zpětným vyhledáváním a ukazateli======\n# Pro každý bod v srcTrie přepočítá ukazatel na další možný strom\n# Snížení časové složitosti – rychlejší průchod stromem\n# Vyhledání prefixu (001, 001)(D,S) – při neúspěchu v x přechod na y\n# Měly bychom být schopné na základě pravidel vytvořit strom\n[[Soubor:Trie_ukazatele.png]]\n\n----\n\n=====Metody typu rozděl a panuj=====\n# Využívá myšlenku rozdělení problému na jednodušší podčásti, které se zpracují nezávisle a celkový výsledek se složí z dílčích výsledků\n# Prohledává jednotlivé množiny (dimenze) pomocí efektivních jednodimenzionálních metod\n# \'\'\'Tři způsoby implementace této metody:\'\'\'\n## Lineární prohledávání pomocí bitového vektoru\n## Použití kartézského součinu\n## Metoda rekurzivní klasifikace toků\n\n======Lineární vyhledávání pomocí bitového vektoru======\n# Bitový vektor obsahuje výskyt prefixu v množině pravidel\n# Celkový bitový vektor je průnikem dílčích výsledků (bitový AND)\n# Touhle metodou je možné zpracovávat paralelně\n\n[[Soubor:Bit_vector.png]]\n\nPříklad: vyhledání H = (147.229.5.1, 147.228.15.1, 53, 1029, UDP)\n\n111011, 111001, 010011, 111011, 110111 = 010001\n\n\n\n======Klasifikace pomocí kartézského součinu======\n# Vytvoří vhodné datové struktury pro hledání v jednotlivých množinách\n# Tyto struktury (např. jednodimenzionální stromy trie) provádějí nejdelší prefixovou shodu nad odpovídajícími položkami z hlavičky paketu\n# Abychom určili nejlepší prefixové pravidlo, musíme vytvořit tabulku kartézského součinu\n# Tato tabulka obsahuje pro každý vektor kartézského součinu předpočítané pravidlo pro nejlepší shodu\n\n[[Soubor:Kartez_soucin1.png]]\n\n# Pokud klasifikátor neobsahuje univerzální pravidlo (*,*,*,*,*), může se stát, že pro daou kombinaci položek vektoru neexistuje žádné pravidlo\n# Pokud neexistuje žádné vyhovující klasifikační pravidlo pro vektor, jedná se o tzv. prázdný kartézský součin\n# Prefixové vyhledávání v jednotlivých dimenzích lze implementovat paralelně\n\n[[Soubor:Kartez_soucin2.png]]\n\n# Exponenciální nárust prostorové složitosti talbulky\n# V nejhorším případě N^k, kde k je počet dimenzí a N počet prvků\n\n\n\n======Metoda rekurzivní klasifikace toků======\n# Rozšířením metody kartézského součinu v kombinaci s bitovým vektorem\n# Řeší exponenciální nárust záznamů při použití kartézského součinu\n# Mnohé kombinace prefixů jednotlivých dimenzí (vektorů) odpovídají stejné množině klasifikačních pravidel\n# Ty vektory, které mají stejné pravidla, tvoří třídu ekvivalence\n# Princip této metody je založen na výpočtu dílčích kartézských součinů nad třídami ekvivalence\n# Celkový výsledek netvoříme skládáním dílčích kartézských součinů, ale kombinací vypočtených tříd ekvivalence -> významně se tím redukují paměťové nároky\n\n[[Soubor:Rekurzivni_klasifikace.png]]\n\n==Zajištění kvality služeb==\n\n====Přizpůsobení provozu z pohledu kvality====\n\n=====Značení paketů (packet marking) – klasifikace=====\n=====Omezení provozu (traffic policing)===== \n# slouží k řízení maximální rychlosti individuálního toku či agregovaných toků\n# každému toku je přiřazen odpovídající profil přenosu dat\n# profil definuje rchlostní a přenosové parametry toku\n# pokud daný tok překročí tyto parametry, jsou pakety z toku zahozeny nebo označeny nižší prioritou\n# nedochází ke zpoždění, ale za cenu ztrát\n=====Rozložení provozu (traffic shaping)=====\n# slouží k regulaci rychlosti a objemu provozu jednotlivých toků\n# rozložení provozu v čase na určitou rychlost a zajištění splnění podmínek SLA\n# rozprostře shluky paketů tak, aby nedošlo k překročení maximální povolené přenosové kapacity\n# malá ztrátovost, ale zpoždění\n[[Soubor:traffic.png]]\n\n\'\'\'Zajištění QoS na internetu\'\'\'\n# SLA – Service Level Agreement – definované požadavky zákazníka (je to dohoda). Specifikuje nároky na přenos zákaznicných dat – obvykle nárok na fyzické připojení k síti (dostupnost a propustnost)\n# Většinou, když provider přijímá data, tak na výstupu se provádí traffic shaping – rozkládám provoz tak, aby se přenášel všechen\n# Na vstupu (kde mám já zaplacené služby) se provádí marking a policing – označení vstupních paketů a ořežání špiček\n# Na základě označení to přenáším po síti, kterou mám pod kontrolou a pak na výstupu opět provedu shaping\n\n[[Soubor:Qos_net.png]]\n\n----\n\n====Plánování QoS pomocí front====\n# Fronta je abstraktní datová struktura, může být softwarová nebo hardwarová. Většinou když přichází data, ukládají se do HW fronty a potom se překlasifikovávájí a ukládají do SW front\n\n\'\'\'Spracování paketu na síťovém zařízení\'\'\'\n# přijde do hw fronty a zjišťuje zda je fronta plná nebo ne. \n# Pokud je fronta plná, předává se to do sw front, pokud jsou vytvořené a čeká to tam.\n# Pokud je fronta prázdná, rovnou tojde na výstup a přeposílá se to – pokud zařízení není zahlcené, tak bez ohledu na klasifikaci pakety jdou na výstup a nedochází ke zpoždění nebo předbíhání paketů. \n# Teprve až se výstupní fronta začne zaplňovat, přicházejí ke slovu techniky sw fronty, klasifikace a způsob odbavení.\n# Pokud jsou sw fronty zahlcené, tak se to zahazuje\n# Fronty jsou seřazeny podle priority – při určitém nastavení front se může stát, že prioritnější provoz je zahazován, protože fronta nemá dostatečnou kapacitu\n\n----\n\n======Fronta typu FIFO (First In-First Out)======\n[[Soubor:fifo.png]]\n\n# Dobře se implementují\n# Řazení výstupních paketů v pořadí jak přicházejí\n# Fronta FIFO neřeší priority\n# Předvídatelné zpoždění paketů – D = B/R\n## B – velikost fronty\n## R – rychlost linky\n\n\n----\n\n======Prioritní fronty PQ (Priority Queue)======\n[[Soubor:pq.png]]\n# Více prioritních tříd – třídění závisí na přijaté politice\n# Každá třída má vlastní výstupní frontu\n# Riziko vyhladovění – dokud není prázdná prioritnější fronta, tak se neodbavují další\n# V praxi se prioritní fronty kombinují ještě s jinými frontami\n\n----\n\n======Cyklické fronty RR (Round Robin)======\n[[Soubor:rr.png]]\n# Každá fronta odpovídá jednomu toku (z celkem n)\n# Cyklická obsluha všech front\n# Rychlost obsluhy je R/n\n# V jednom cylku se z každé fronty odebere stejný počet paketů (bitů)\n# Pokud je fronta prázdná, pokračuje se obsluhou nejbližší neprázdné fronty\n\n\'\'\'Deficitní cyklické fronty\'\'\' – mají jakési počítadlo, které určuje, kolik by se mělo za dané kolečko odebrat – pokud je extra velký paket, může se čekat pár kol, než se odebere\n\n----\n\n======Váhové fronty WFQ (Weighted Fair Queue)======\n[[Soubor:wfq.png]]\n# Pro každý tok jedna fronta- dynamické vytváření a zánik\n# Váha určuje počet odebraných paketů fronty\n# Podobné jako round robin, ale je určená váha dat frokaždou frontu\n# Můžu jimi velmi přesně říct, jaké má být přenosové pásmo jakéhokoli provozu\n# Pokud mám provoz a chci dát např 50% na RTP, 20% na SIP a zbytek na webové služby, tak nastavím v tomto poměru váhy a přenosové pásmo se v tomhle poměru bude přidělovat\n# Dochází k přeskládání, ale na rozdíl od prioritních front nedochází k vyhladovění (a jistým způsobem je možné prioritu nastavit\n\n----\n\n====Mechanismus Leaky Bucket====\n# \'\'\'To samé co Token Bucket!\'\'\'\n# Máme nádobu ve které je díra. Nějakou rychlostí z kohoutku teče voda a nějako to zase dolu odtéká pryč. Pokud rychlost odtékání je menší než rychlost přitékání, tak semi to začne plnit. A až se mi to zaplní, začne přetékat přes okraj.\n\'\'\'U sítí:\'\'\'\n# Máme vědro, které může uchovat až b žetonů (tokens). \n# Žetony se generují rychlostí r žetonů za sekundu a vkládají se do vědra\n# Pokud obsahuje vědro méně než b žetonů, je do něj žeton vložen\n# V případě plného vědra je žeton zahozen\n# Používá se pro omezení toku v síti\n# Předtím, než může paket vstoupit do sítě, musí být prvně odstraněn jeden žeton z vědra\n# Pokud je vědro prázdné, musí paket počkat, než se žeton vygeneruje\n[[Soubor:token_bucket.png]]\n\n\'\'\'Tři základní kritéria pro ořezání:\'\'\'\n\n\'\'\'Průměrná rychlost (average rate)\'\'\' – k omezení dlouhodobé přuměrné rychlosti\n\n\'\'\'Rychlost ve špičce (peak rate)\'\'\' – maximální počet paketů během kratší časové periody\n\n\'\'\'Velikost shluků (burst size)\'\'\' – limit maximálního počtu paketů, které jsou poslány do sítě během extrémně krátkého časového intervalu (omezení velikosti shluku paketů)\n\n----\n\n====Integrované služby====\n# Snaží se na vždy specifikovat zdroje, které daný provoz/tok konkrétně vyžaduje, udělat tam rezervaci přenosové kapacity, příp. kapacity pro zpracování. Pokud toto existuje, tak se vytvoří taková cesta pro ten tok a zajistí se tam požadovaná kvalita toho toku.\n# Pokud zařízení neumožňuje pokrýt všechny požadavky, které tam pomocí integrovaných služeb přijdou, tak to odmítne a máme možnost to buď poslat někam jinam, s jinou kvalitou, nebo vůbec. Tzn. zařízení mi řekne, že v této kvalitě ta data není schopné přenést\n# Dá se použít pro jednotlivé toky, ne páteřní směrovače, kde jsou jich tisíce\n\n\n\'\'\'Obsahují pouze malý počet tříd (tři základní), jemnější dělení neumožňuje:\'\'\'\n# \'\'\'garantované služby\'\'\' – říkají, jaké je maximální zpoždění, které můžeme na zařízení dosáhnout – striktní omezení zpoždění ve frontách\n# \'\'\'kontrolování zátěže\'\'\' – zajišťují, že provoz prochází v takové kvalitě, jako kdyby prvek nebyl zatížený\n# \'\'\'největší úsilí\'\'\' – bez toho aby se vytvářela rezervace – běžná kvalita nad IP\n\n=====Rezervační protokol RSVP=====\n# Aplikační protokol, kt. vytváří spojení od přijímače k vysílanému zdroji\n# Je to signalizační protokol pro rezervaci zdrojů na síťových prvcích\n# RSVP vyžaduje určitou režii- než dojde k přenosu se musí ustavit spojení a rezervace zdrojů\n# Rezervace pásma v multicastových stromech – provádí je pomocí jakýchsi proměnných jako rychlost přenosového pásma, velikost zásobníku tokenů\n# Pokud více stanic pošle žádost o rezervaci, může dojít k tomu, že se ty rezervace spojí do jedné a rezervuje se jeden kanál s danými vlastnostmi, ve kterém potečou data všech žadatelů/příjemců\n# Žádost o rezervaci provádí koncová stanice (receiver-oriented) – přijímač, ne zdroj vysílání\n# Rezervace zdrojů se používá jen v sítích pod jednou administrací (aby si nemohl kdokoliv cokoliv rezervovat)\n# Zařízení, které tvoří infrastrukturu sítě musí mít poporu RSVP (a až poté je možné vytvorit rezervované přenosové pásmo)\n# Rezervace se provádí pro tok\n# Výhoda: garantuje pro daný tok kvalitu, jakou jsme požadovali\n# Nevýhoda: režie a složitost (pokud by každý tok měl mít rezervaci pásma)\n\n----\n\n====Diferenciované služby====\n# Nepracují na základě toků, ale na základě paketů a hlavním cílem je diferenciovat pakety do určitých tříd a pro dané třídy se definují politiky\n# Pakety stejné třídy se posílají se stejnou prioritou\n# Máme koncová zařízení, která vysílají pakety, které chceme s určitou kvalitou služeb doručit. Pokud paket dorazí na vstupní směřovač dané sitě pod jednou správou (většinou providera), tak podle typu paketů dojde ke klasifikaci.\n# Paket je označen (u IP políčko ToS – type of service) a v rámci sítě toho providera jsou nadefinované politiky zpracování jedn. tříd na každém aktivním prvku \n# Flexibilní a rozšiřitelné (z pohledu definice tříd)\n# Umožňuje rychlé přeposílání, protože routery uvnitř sítě neprovádí žádnou klasifikaci, jen když přijde paket, podívají se na IP precedens a přepošlou ho do dané fronty\n# Dřív se ale zjistí, kam paket směruje, a až pak se to umístí do výstupní fronty (ta funguje podle politiky, kterou jsme definovali)\n# Z hlavičky se používá IP precedence, která definuje 3 bity v políčku ToS. Další 4 bity jsou podle definice nevyužité a pak je tam ještě rezervní bit\n# Později to nějaké RFC předefinovalo, a řeklo že to už nebude ToS, ale DS a prvních 6 bitů bude DSCP kód – ten říká, s s jakou precedensí se to posílá a s jakou pravděpodobností se to zahazuje, když dochází k zahlcení\n# Přijde paket, provede se klasifikace, pak se označí (přidělí se třída daného provozu v ToS nebo DSCP), pak se přepošle dál, a podle toho jk je označen a jak jsou zaplněné fronty se přepole dál nebo zahodí\n\n\n\'\'\'Třídy, jak s oklasifikovanými pakety zacházet:\'\'\'\n======Přednostní přeposílání EF (Expedited Forwarding)======\n# výstupní rychlost odeslání paketů dané třídy musí být stejná nebo vyšší než nakonfigurovaná rychlost\n# garantováno bez ohledu na intenzitu ostatního provozu\n======Garantované přeposílání AF (Assured Forwarding)======\n# rozděluje provoz do 4 tříd – AF1 až AF4\n# každé třídě je zaručena určitá přenosová rychlost\n# každá ze tříd definuje tři druhy zahazování paketů\n# pokud dojde k zahlcení linky, směrovač může zahodit pakety na základě preference zahazování\n[[Soubor:af.png]]\n# \'\'\'Low Drop Prec\'\'\' – pokud dojde k zahlcení, tento paket se bude zahazovat poslední z paketů stejné třídy\n# \'\'\'High Drop Prec\'\'\' – pokud dojde k zahlcení, zahoďte mě!\n[[Soubor:high_drop.png]]\n======Best Effort======\n# implicitní třída, která se použije pokud není hodnota DSCP namapovaná na nějakou politiku\n\n----\n\n====Prevence zahlcení RED a WRED====\n# Vychází z toho, že jednou se každá fronta zahltí\n# Když se fronta začne zaplňovat, panika, co budeme dělat?\n## můžeme čekat, až se zaplní, a pak všechno zahazovat\n## RED a WRED – pokud se fronta začne zaplňovat ale ještě nebude plná, začnu náhodně zahazovat některé pakety – fronta se hned nezahltí\n\n======RED======\n# Máme dva body, Qmin a Qmax – definice vstupní fronty\n# Do vstupní fronty přichází pakety. Pokud velikost fronty nedosáhla Qmin, pakety se zahazují s nulovou pravděpodobností\n# S narůstající frontou se mi zvyšuje pravděpodobnost zahazování\n# Jakmile se fronta zaplní úplně, všechny pakety se zahazují\n# Generují se náhodná čísla, pokud spadne do intervalu, paket se zahodí\n[[Soubor:red.png]]\n\n======WRED======\n# Váhový RED (Weighted RED)\n# Nezahazuje pakety jen na základě toho, kdy přišly, ale zajímá ho i precedens\n# Data s lepší prioritou se začnou zahazovat později\n[[Soubor:wred.png]]\n\n----','utf-8'),(439,'==Filtrování paketů==\n=====Filtrovací pravidla=====\n# Slouží pro filtrování vstupního a výstupního provozu\n# Kontrolují provoz (data propustí nebo zablokují (roztřídit a nad každou skupinou provést nějaké pravidlo)\n# Filtruje se nejčastěji podle: čísla protokolu, zdrojové/cílové IP, zdrojový/cílový port...\n[[Soubor:Packet_filter.png]]\n\n# Když přichází paket do zařízení, tak zjiťujeme zda tam ten paket patří a jestli je tm nějaký vstupní filtr. Pokud jsou pravidla nastavené na routru, paket se porovná s filtrovacími pravidly, a podle toho se buď pošle dál, nebo se zlikviduje. Pokud je povolený, postupuje dál do počítače. Tam se zpracovává, hledá se ve směrovací tabulce nejlepší shoda cílové adresy paketu. Pokus se položka nejde, začne se zpracovávat, jinak se zahodí.\n\n=====Formát filtrovacích pravidel=====\n<number> <action> <protocol> from <src IP> to <dst IP> [src-port <src port>] [dst-port <dst port>] [<flags>] [<options>]\n\nNapř.:\n\n10 permit TCP from 147.229.0.0 to any dst-port 80 (povolení internetového provozu)\n\n30 permit UDP from any to 147.229.0.0 src-port 53 (přijímání odpovědí DNS)\n\n# Záleží na pořadí, protože se vybírá první vyhovující, a ne nejlepší vyhovující\n# Pravidla jsou od nejkonkrétnějšího po nejobecnější\n\n----\n\n==Firewally==\n\'\'\'Typy:\'\'\'\n\n\'\'\'Filtrování paketů (packet filtering)\'\'\' – kontrola jednotlivých paketů\n\n\'\'\'Stavové filtrování (stateful filtering)\'\'\' – kontrola TCP toku (SYN, ACK) – pomalší než packet filtering, může mít více kritérií a pamatuje si historii, co se využívá hlavně proti útokům typu SYN attack atp. -> kontroluje zda pakety přichází v pořadí, jakém by měli, podle sekvenčních čísel\n\n\'\'\'Aplikační brána (Application gateway)\'\'\' – na úrovni aplikací, kontroluje aplikační protokol, zda neobsahuje něco co nemá, pro každý protokol musím mít podporu v aplikační bráně\n\n======Inkluzivní přístup ======\n# většina firewallových pravidel\n# Povoluje jen služby, které splňují pravidla, ostatní blokuje\n# Bezpečnější než exkluzivní přístup (propustí všechno, co není zakázané)\n\n======Stavové filtrování======\n# Provoz považován za dvousměrnou výměnu paketů v rámci relace\n# Keep-state, kt. udržuje stavové informaceo daném spojení – existuje tabulka spojení, která nám říká, která spojení chceme nadále udržovat\n# Keep-state automaticky generuje interní pravidla pro každý očekávaný paket v této relaci. To pravidlo tam existuje tak dlouho, dokud chodí pakety jedním směrem, čímž se obnovuje timeout, nebo dokud vyprší timeout. Timeouty se liší od protokolu\n\'\'\'Činnost stavového filtrování:\'\'\'\n\n1. Odcházející paket se zkontroluje v dynamické stavové tabulce\n\n# Pokud paket odpovídá očekávanému paketu relace (TCP) prochází. Stav relace je v tabulce aktualizován\n# Ostatní pakety se kontrolují podle výstupních pravidel\n2. Podobně pro přicházející pakety\n\n3. Po ukončení se zruší informace z dynamické stavové tabulky\n\n\n\n======Aplikace filtrování======\n\'\'\'Firewally\'\'\'\n# Filtrování provozu\n# Zahazování, propuštění definovaného provozu\n\'\'\'Detekční systémy IDS (Intrusion detection systems)\'\'\'\n# Pracují jako firewally, když dojde k nějaké akci, tak si ji zalogují, příp. pošlou e-mail\n# Mohou vyhledávat nejen na základě pravidel, ale i obsahu paketů (nejen hlavičky)\n# Vyhledávají na základě signatur (hledají řetězce nebezpečného chování)\n## kontrola provozu, monitorování dat\n## detekce útoků, neočekávaného chování\n## detekce na základě signatur či chování\n\'\'\'Prevenční systémy IPS (Intrusion prevention systems)\'\'\'\n# Reakce na útok -> odklonění či odfiltrování provozu\n\n----\n\n==Klasifikace paketů==\n\'\'\'Algoritmický problém:\'\'\'\n# Snažíme se roztřídit zprávy (pakety) podle zadaných pravidel\n# Cílem je co nejrychleji vyhledat ke každému příchozímu paketu pravidlo, jehož položky se shodují s hodnotami hlavičce paketu\n\n\'\'\'Má dvě fáze:\'\'\'\n# \'\'\'Předzpracování (pre-processing)\'\'\' – příprava a uspořádání databáze filtrovacích pravidel do datových struktur optimalizovaných pro vyhledávání\n# \'\'\'Klasifikace\'\'\' - dochází ke zpracování příchozího provozu a vyhledání dat z hlavičky paketu potřebných ke klasifikaci. Poté procházíme datovou struktorou pravidel, která byla vytvořena ve fázi předzpracování. Hodnoty z hlavičky paketu se porovnávají s hdnotami pravidel a hledá se nejlepší klasifikační pravidlo.\n\n\'\'\'Paket obsahuje K hlaviček (dimenzí):\'\'\'\n# \'\'\'Dimenze\'\'\' – typ hlavičky, kterou zkoumám – pokud zkoumám podle IP odesílatele, IP cíle, portu odesílatele, portu cíle, typu protokolu, tak mám 5 dimenzí\n\n\'\'\'Klasifikátor\'\'\' se skádá z pravidel R = {R1, R2, …, Rn} – množina pravidel, každé pravidlo obsahuje n-tici, která obsahuje K položek (počet dimenzí). Ne každá položka musí být vyplněna. Např. R1 = (147.229.*.*,*,25,*,*)\n\n----\n\n\'\'\'Typy porovnání:\'\'\'\n# Přesné porovnání (exact match)\n# Porovnání prefixu (prefix match)\n# Intervalové porovnání (range match)\n# Porovnání regulárního výrazu (regular expression match)\n\n====Typy vyhledávání====\n\'\'\'Podle dimenzí (počtu kontrolovaných polí v hlavičce):\'\'\'\n# Vyhledávání v jedné dimenzi (1D)\n# Vyhledávání ve dvou dimenzích (2D)\n# Vyhledávání ve více dimenzích (nD)\n\'\'\'Podle techniky vyhledávání:\'\'\'\n# Lineární vyhledávání (linear search)\n# Vyhledávání technikou rozděl a panuj (divide and conquer)\n# Stromové vyhledávání (tries, grid of tries)\n# Použití bitového vektoru (bit vector)\n# Vyhledávání pomocí vektorového součinu (cross producting)\n# Rozhodovací stromy (decision trees)\n\n\n\n\'\'\'Vyhledávání ve více dimenzích\'\'\'\n\n\'\'\'Vyhledávání podle více kritérií (položek hlavičky)\'\'\'\n# Časově i prostorově náročné – potřeba zvolit kompromisy\n# Ne všechny položky se stejně často používají\n# Metody se většinou zaměřují na optimální vyhledávání ve 2D\n\'\'\'Předpoklady pro použití heuristických metod:\'\'\'\n# Prefixy IP adres se porovnávají do maximálně 24 bitů\n# Průnik prefixů není obvyklý (zřídka např. 00* a 0001*)\n# Intervaly se v praxi příliš nepoužívají\n\n\n----\n\n=====Lineární vyhledávání=====\n# Nejjednodušší způsob klasifikace\n# Časová složitost O(N*K)\n# Vhodné pro malý počet pravidel\n# Postup: projdi postupně všechna pravidla z R a porovnej hodnoty ve všech dimenzích\n======Lineární vyhledávání ve více dimenzích======\n\'\'\'Lineární seznam pravidel\'\'\'\n# Preference dvojic (S, D)(zdrojová IP, cílová IP)\n# Kombinace 2D klasifikace + lineární průchod v dalších dimenzích\n# Každé pravidlo reprezentováno pouze jednou\n\n[[Soubor:linearni.png]]\n\n# Pro reprezentaci k-rozměrných pravidel použijeme vhodnou 2D reprezentaci (např. síť stromů trie), na kterou navážeme pro různé dvojice (S, D) lineární seznam pravidel, které odpovídají daným hodnotám (S, D) v pravidle\n\n\n----\n\n=====Stromové vyhledávání=====\n# Stromová struktura trie (prefixové vyhledávání)\n# Binární srromová struktura pro klasifikaci jedné dimenze (IP adresy)\n# Uzel označuje bit prefixu, cesta z uzlu Px ke kořeni tvoří prefix\n# Snadné procházení, vkládání, rušení\n\n[[Soubor:Trie_prefixy.png]]\n\n# Rychlé vyhledávání. Složitější je, že na počátku je potřebné z těchto pravidel vybudovat strom, což ale lze udělat offline\n# \'\'\'Přidání pravidla\'\'\' \n## přidání větev, uzlů, označení pravidla\n# \'\'\'Rušení pravidla\'\'\' \n## pokud je listem, zruším všechny uzly až po ten, ktrý se ještě využívá\n## pokud není, zruší se jen označení (např. P1)\n# Pokud procházením stromem skončím na pravidle, použiju ho, jinak se backtrackingem vrátím na předchozí vyhovující pravidlo\n\n\n\n======Rozšíření trie do dvou dimenzí======\n# Pro každou dimenzi strom trie – postupné vyhledávání\n# Exponenciální nárust prostorové složitosti O (N^k) – duplicita stromů\n[[Soubor:Trie_rozsireni.png]]\n\n\n\n======Grid of tries bez duplicit, se zpětným vyhledáváním======\n# Menší prostorová složitost (bez duplicit), větší časová náročnost\n# Použití algoritmu zpětného vyhledávání (backtracking)\n# Konstrukce stromu je jednodušší, ale je složitější vyhledávání (musí se vracet)\n[[Soubor:Trie_backtracking.png]]\n\n\n\n======Grid of tries se zpětným vyhledáváním a ukazateli======\n# Pro každý bod v srcTrie přepočítá ukazatel na další možný strom\n# Snížení časové složitosti – rychlejší průchod stromem\n# Vyhledání prefixu (001, 001)(D,S) – při neúspěchu v x přechod na y\n# Měly bychom být schopné na základě pravidel vytvořit strom\n[[Soubor:Trie_ukazatele.png]]\n\n----\n\n=====Metody typu rozděl a panuj=====\n# Využívá myšlenku rozdělení problému na jednodušší podčásti, které se zpracují nezávisle a celkový výsledek se složí z dílčích výsledků\n# Prohledává jednotlivé množiny (dimenze) pomocí efektivních jednodimenzionálních metod\n# \'\'\'Tři způsoby implementace této metody:\'\'\'\n## Lineární prohledávání pomocí bitového vektoru\n## Použití kartézského součinu\n## Metoda rekurzivní klasifikace toků\n\n======Lineární vyhledávání pomocí bitového vektoru======\n# Bitový vektor obsahuje výskyt prefixu v množině pravidel\n# Celkový bitový vektor je průnikem dílčích výsledků (bitový AND)\n# Touhle metodou je možné zpracovávat paralelně\n\n[[Soubor:Bit_vector.png]]\n\nPříklad: vyhledání H = (147.229.5.1, 147.228.15.1, 53, 1029, UDP)\n\n111011, 111001, 010011, 111011, 110111 = 010001\n\n\n\n======Klasifikace pomocí kartézského součinu======\n# Vytvoří vhodné datové struktury pro hledání v jednotlivých množinách\n# Tyto struktury (např. jednodimenzionální stromy trie) provádějí nejdelší prefixovou shodu nad odpovídajícími položkami z hlavičky paketu\n# Abychom určili nejlepší prefixové pravidlo, musíme vytvořit tabulku kartézského součinu\n# Tato tabulka obsahuje pro každý vektor kartézského součinu předpočítané pravidlo pro nejlepší shodu\n\n[[Soubor:Kartez_soucin1.png]]\n\n# Pokud klasifikátor neobsahuje univerzální pravidlo (*,*,*,*,*), může se stát, že pro daou kombinaci položek vektoru neexistuje žádné pravidlo\n# Pokud neexistuje žádné vyhovující klasifikační pravidlo pro vektor, jedná se o tzv. prázdný kartézský součin\n# Prefixové vyhledávání v jednotlivých dimenzích lze implementovat paralelně\n\n[[Soubor:Kartez_soucin2.png]]\n\n# Exponenciální nárust prostorové složitosti talbulky\n# V nejhorším případě N^k, kde k je počet dimenzí a N počet prvků\n\n\n\n======Metoda rekurzivní klasifikace toků======\n# Rozšířením metody kartézského součinu v kombinaci s bitovým vektorem\n# Řeší exponenciální nárust záznamů při použití kartézského součinu\n# Mnohé kombinace prefixů jednotlivých dimenzí (vektorů) odpovídají stejné množině klasifikačních pravidel\n# Ty vektory, které mají stejné pravidla, tvoří třídu ekvivalence\n# Princip této metody je založen na výpočtu dílčích kartézských součinů nad třídami ekvivalence\n# Celkový výsledek netvoříme skládáním dílčích kartézských součinů, ale kombinací vypočtených tříd ekvivalence -> významně se tím redukují paměťové nároky\n\n[[Soubor:Rekurzivni_klasifikace.png]]\n\n==Zajištění kvality služeb==\n\n====Přizpůsobení provozu z pohledu kvality====\n\n=====Značení paketů (packet marking) – klasifikace=====\n=====Omezení provozu (traffic policing)===== \n# slouží k řízení maximální rychlosti individuálního toku či agregovaných toků\n# každému toku je přiřazen odpovídající profil přenosu dat\n# profil definuje rchlostní a přenosové parametry toku\n# pokud daný tok překročí tyto parametry, jsou pakety z toku zahozeny nebo označeny nižší prioritou\n# nedochází ke zpoždění, ale za cenu ztrát\n=====Rozložení provozu (traffic shaping)=====\n# slouží k regulaci rychlosti a objemu provozu jednotlivých toků\n# rozložení provozu v čase na určitou rychlost a zajištění splnění podmínek SLA\n# rozprostře shluky paketů tak, aby nedošlo k překročení maximální povolené přenosové kapacity\n# malá ztrátovost, ale zpoždění\n[[Soubor:traffic.png]]\n\n\'\'\'Zajištění QoS na internetu\'\'\'\n# SLA – Service Level Agreement – definované požadavky zákazníka (je to dohoda). Specifikuje nároky na přenos zákaznicných dat – obvykle nárok na fyzické připojení k síti (dostupnost a propustnost)\n# Většinou, když provider přijímá data, tak na výstupu se provádí traffic shaping – rozkládám provoz tak, aby se přenášel všechen\n# Na vstupu (kde mám já zaplacené služby) se provádí marking a policing – označení vstupních paketů a ořežání špiček\n# Na základě označení to přenáším po síti, kterou mám pod kontrolou a pak na výstupu opět provedu shaping\n\n[[Soubor:Qos_net.png]]\n\n----\n\n====Plánování QoS pomocí front====\n# Fronta je abstraktní datová struktura, může být softwarová nebo hardwarová. Většinou když přichází data, ukládají se do HW fronty a potom se překlasifikovávájí a ukládají do SW front\n\n\'\'\'Spracování paketu na síťovém zařízení\'\'\'\n# přijde do hw fronty a zjišťuje zda je fronta plná nebo ne. \n# Pokud je fronta plná, předává se to do sw front, pokud jsou vytvořené a čeká to tam.\n# Pokud je fronta prázdná, rovnou tojde na výstup a přeposílá se to – pokud zařízení není zahlcené, tak bez ohledu na klasifikaci pakety jdou na výstup a nedochází ke zpoždění nebo předbíhání paketů. \n# Teprve až se výstupní fronta začne zaplňovat, přicházejí ke slovu techniky sw fronty, klasifikace a způsob odbavení.\n# Pokud jsou sw fronty zahlcené, tak se to zahazuje\n# Fronty jsou seřazeny podle priority – při určitém nastavení front se může stát, že prioritnější provoz je zahazován, protože fronta nemá dostatečnou kapacitu\n\n----\n\n======Fronta typu FIFO (First In-First Out)======\n[[Soubor:fifo.png]]\n\n# Dobře se implementují\n# Řazení výstupních paketů v pořadí jak přicházejí\n# Fronta FIFO neřeší priority\n# Předvídatelné zpoždění paketů – D = B/R\n## B – velikost fronty\n## R – rychlost linky\n\n\n----\n\n======Prioritní fronty PQ (Priority Queue)======\n[[Soubor:pq.png]]\n# Více prioritních tříd – třídění závisí na přijaté politice\n# Každá třída má vlastní výstupní frontu\n# Riziko vyhladovění – dokud není prázdná prioritnější fronta, tak se neodbavují další\n# V praxi se prioritní fronty kombinují ještě s jinými frontami\n\n----\n\n======Cyklické fronty RR (Round Robin)======\n[[Soubor:rr.png]]\n# Každá fronta odpovídá jednomu toku (z celkem n)\n# Cyklická obsluha všech front\n# Rychlost obsluhy je R/n\n# V jednom cylku se z každé fronty odebere stejný počet paketů (bitů)\n# Pokud je fronta prázdná, pokračuje se obsluhou nejbližší neprázdné fronty\n\n\'\'\'Deficitní cyklické fronty\'\'\' – mají jakési počítadlo, které určuje, kolik by se mělo za dané kolečko odebrat – pokud je extra velký paket, může se čekat pár kol, než se odebere\n\n----\n\n======Váhové fronty WFQ (Weighted Fair Queue)======\n[[Soubor:wfq.png]]\n# Pro každý tok jedna fronta- dynamické vytváření a zánik\n# Váha určuje počet odebraných paketů fronty\n# Podobné jako round robin, ale je určená váha dat frokaždou frontu\n# Můžu jimi velmi přesně říct, jaké má být přenosové pásmo jakéhokoli provozu\n# Pokud mám provoz a chci dát např 50% na RTP, 20% na SIP a zbytek na webové služby, tak nastavím v tomto poměru váhy a přenosové pásmo se v tomhle poměru bude přidělovat\n# Dochází k přeskládání, ale na rozdíl od prioritních front nedochází k vyhladovění (a jistým způsobem je možné prioritu nastavit\n\n----\n\n====Mechanismus Leaky Bucket====\n# Máme nádobu ve které je díra. Nějakou rychlostí z kohoutku teče voda a nějako to zase dolu odtéká pryč. Pokud rychlost odtékání je menší než rychlost přitékání, tak semi to začne plnit. A až se mi to zaplní, začne přetékat přes okraj.\n\'\'\'U sítí:\'\'\'\n# Vnutí vstupnímu provozu, který je obvykle tvořen nepravidelnými shluky dat, stálý výstup\n# Do vědra (fronty) přichází neregulovaný datový tok\n# Pakety odcházejí dírou ve dně vědra a jsou přenáseny do sítě rychlostí r bytů za sekundu\n# Velikost vědra je omezena na b bytů\n# Pokud algoritmus má frontu (b > 0), jedná se o rozložení provozu (traffic shaping), při kterém může dojít ke zpoždění paketů přicházejících větší rychlostí než r\n# Jestliže je velikost fronty nulová, jedná se o ořezání provozu (traffic policing)\n\n\n\n====Mechanismus Token Bucket====\n# Po mnoho aplikací je vhodnější krátkodobě povolit překročení výstupní rychlosti tak, aby vstupní shluk dat mohl projít bez zahození\n# Máme vědro, které může uchovat až b žetonů (tokens). \n# Žetony se generují rychlostí r žetonů za sekundu a vkládají se do vědra\n# Žeton odpovídá povolení přeposlat jeden byte\n# Pokud obsahuje vědro méně než b žetonů, je do něj žeton vložen\n# V případě plného vědra je žeton zahozen\n# Maximální shluk dat, který může poslat naráz, má velikost b\n# Předtím, než může paket vstoupit do sítě, musí být prvně odstraněn jeden žeton z vědra\n# Pokud je vědro prázdné, musí paket počkat, než se žeton vygeneruje (Traffic shaping)\n# Traffic policing v tom případě, že není žádná fronta pr oukládání paketů\n\n\n\n\'\'\'Tři základní kritéria pro ořezání:\'\'\'\n\n\'\'\'Průměrná rychlost (average rate)\'\'\' – k omezení dlouhodobé přuměrné rychlosti\n\n\'\'\'Rychlost ve špičce (peak rate)\'\'\' – maximální počet paketů během kratší časové periody\n\n\'\'\'Velikost shluků (burst size)\'\'\' – limit maximálního počtu paketů, které jsou poslány do sítě během extrémně krátkého časového intervalu (omezení velikosti shluku paketů)\n\n----\n\n====Integrované služby====\n# Snaží se na vždy specifikovat zdroje, které daný provoz/tok konkrétně vyžaduje, udělat tam rezervaci přenosové kapacity, příp. kapacity pro zpracování. Pokud toto existuje, tak se vytvoří taková cesta pro ten tok a zajistí se tam požadovaná kvalita toho toku.\n# Pokud zařízení neumožňuje pokrýt všechny požadavky, které tam pomocí integrovaných služeb přijdou, tak to odmítne a máme možnost to buď poslat někam jinam, s jinou kvalitou, nebo vůbec. Tzn. zařízení mi řekne, že v této kvalitě ta data není schopné přenést\n# Dá se použít pro jednotlivé toky, ne páteřní směrovače, kde jsou jich tisíce\n\n\n\'\'\'Obsahují pouze malý počet tříd (tři základní), jemnější dělení neumožňuje:\'\'\'\n# \'\'\'garantované služby\'\'\' – říkají, jaké je maximální zpoždění, které můžeme na zařízení dosáhnout – striktní omezení zpoždění ve frontách\n# \'\'\'kontrolování zátěže\'\'\' – zajišťují, že provoz prochází v takové kvalitě, jako kdyby prvek nebyl zatížený\n# \'\'\'největší úsilí\'\'\' – bez toho aby se vytvářela rezervace – běžná kvalita nad IP\n\n=====Rezervační protokol RSVP=====\n# Aplikační protokol, kt. vytváří spojení od přijímače k vysílanému zdroji\n# Je to signalizační protokol pro rezervaci zdrojů na síťových prvcích\n# RSVP vyžaduje určitou režii- než dojde k přenosu se musí ustavit spojení a rezervace zdrojů\n# Rezervace pásma v multicastových stromech – provádí je pomocí jakýchsi proměnných jako rychlost přenosového pásma, velikost zásobníku tokenů\n# Pokud více stanic pošle žádost o rezervaci, může dojít k tomu, že se ty rezervace spojí do jedné a rezervuje se jeden kanál s danými vlastnostmi, ve kterém potečou data všech žadatelů/příjemců\n# Žádost o rezervaci provádí koncová stanice (receiver-oriented) – přijímač, ne zdroj vysílání\n# Rezervace zdrojů se používá jen v sítích pod jednou administrací (aby si nemohl kdokoliv cokoliv rezervovat)\n# Zařízení, které tvoří infrastrukturu sítě musí mít poporu RSVP (a až poté je možné vytvorit rezervované přenosové pásmo)\n# Rezervace se provádí pro tok\n# Výhoda: garantuje pro daný tok kvalitu, jakou jsme požadovali\n# Nevýhoda: režie a složitost (pokud by každý tok měl mít rezervaci pásma)\n\n----\n\n====Diferenciované služby====\n# Nepracují na základě toků, ale na základě paketů a hlavním cílem je diferenciovat pakety do určitých tříd a pro dané třídy se definují politiky\n# Pakety stejné třídy se posílají se stejnou prioritou\n# Máme koncová zařízení, která vysílají pakety, které chceme s určitou kvalitou služeb doručit. Pokud paket dorazí na vstupní směřovač dané sitě pod jednou správou (většinou providera), tak podle typu paketů dojde ke klasifikaci.\n# Paket je označen (u IP políčko ToS – type of service) a v rámci sítě toho providera jsou nadefinované politiky zpracování jedn. tříd na každém aktivním prvku \n# Flexibilní a rozšiřitelné (z pohledu definice tříd)\n# Umožňuje rychlé přeposílání, protože routery uvnitř sítě neprovádí žádnou klasifikaci, jen když přijde paket, podívají se na IP precedens a přepošlou ho do dané fronty\n# Dřív se ale zjistí, kam paket směruje, a až pak se to umístí do výstupní fronty (ta funguje podle politiky, kterou jsme definovali)\n# Z hlavičky se používá IP precedence, která definuje 3 bity v políčku ToS. Další 4 bity jsou podle definice nevyužité a pak je tam ještě rezervní bit\n# Později to nějaké RFC předefinovalo, a řeklo že to už nebude ToS, ale DS a prvních 6 bitů bude DSCP kód – ten říká, s s jakou precedensí se to posílá a s jakou pravděpodobností se to zahazuje, když dochází k zahlcení\n# Přijde paket, provede se klasifikace, pak se označí (přidělí se třída daného provozu v ToS nebo DSCP), pak se přepošle dál, a podle toho jk je označen a jak jsou zaplněné fronty se přepole dál nebo zahodí\n\n\n\'\'\'Třídy, jak s oklasifikovanými pakety zacházet:\'\'\'\n======Přednostní přeposílání EF (Expedited Forwarding)======\n# výstupní rychlost odeslání paketů dané třídy musí být stejná nebo vyšší než nakonfigurovaná rychlost\n# garantováno bez ohledu na intenzitu ostatního provozu\n======Garantované přeposílání AF (Assured Forwarding)======\n# rozděluje provoz do 4 tříd – AF1 až AF4\n# každé třídě je zaručena určitá přenosová rychlost\n# každá ze tříd definuje tři druhy zahazování paketů\n# pokud dojde k zahlcení linky, směrovač může zahodit pakety na základě preference zahazování\n[[Soubor:af.png]]\n# \'\'\'Low Drop Prec\'\'\' – pokud dojde k zahlcení, tento paket se bude zahazovat poslední z paketů stejné třídy\n# \'\'\'High Drop Prec\'\'\' – pokud dojde k zahlcení, zahoďte mě!\n[[Soubor:high_drop.png]]\n======Best Effort======\n# implicitní třída, která se použije pokud není hodnota DSCP namapovaná na nějakou politiku\n\n----\n\n====Prevence zahlcení RED a WRED====\n# Vychází z toho, že jednou se každá fronta zahltí\n# Když se fronta začne zaplňovat, panika, co budeme dělat?\n## můžeme čekat, až se zaplní, a pak všechno zahazovat\n## RED a WRED – pokud se fronta začne zaplňovat ale ještě nebude plná, začnu náhodně zahazovat některé pakety – fronta se hned nezahltí\n\n======RED======\n# Máme dva body, Qmin a Qmax – definice vstupní fronty\n# Do vstupní fronty přichází pakety. Pokud velikost fronty nedosáhla Qmin, pakety se zahazují s nulovou pravděpodobností\n# S narůstající frontou se mi zvyšuje pravděpodobnost zahazování\n# Jakmile se fronta zaplní úplně, všechny pakety se zahazují\n# Generují se náhodná čísla, pokud spadne do intervalu, paket se zahodí\n[[Soubor:red.png]]\n\n======WRED======\n# Váhový RED (Weighted RED)\n# Nezahazuje pakety jen na základě toho, kdy přišly, ale zajímá ho i precedens\n# Data s lepší prioritou se začnou zahazovat později\n[[Soubor:wred.png]]\n\n----','utf-8'),(440,'','utf-8'),(441,'','utf-8'); INSERT INTO `text` VALUES (442,'==Filtrování paketů==\n=====Filtrovací pravidla=====\n# Slouží pro filtrování vstupního a výstupního provozu\n# Kontrolují provoz (data propustí nebo zablokují (roztřídit a nad každou skupinou provést nějaké pravidlo)\n# Filtruje se nejčastěji podle: čísla protokolu, zdrojové/cílové IP, zdrojový/cílový port...\n[[Soubor:Packet_filter.png]]\n\n# Když přichází paket do zařízení, tak zjiťujeme zda tam ten paket patří a jestli je tm nějaký vstupní filtr. Pokud jsou pravidla nastavené na routru, paket se porovná s filtrovacími pravidly, a podle toho se buď pošle dál, nebo se zlikviduje. Pokud je povolený, postupuje dál do počítače. Tam se zpracovává, hledá se ve směrovací tabulce nejlepší shoda cílové adresy paketu. Pokus se položka nejde, začne se zpracovávat, jinak se zahodí.\n\n=====Formát filtrovacích pravidel=====\n<number> <action> <protocol> from <src IP> to <dst IP> [src-port <src port>] [dst-port <dst port>] [<flags>] [<options>]\n\nNapř.:\n\n10 permit TCP from 147.229.0.0 to any dst-port 80 (povolení internetového provozu)\n\n30 permit UDP from any to 147.229.0.0 src-port 53 (přijímání odpovědí DNS)\n\n# Záleží na pořadí, protože se vybírá první vyhovující, a ne nejlepší vyhovující\n# Pravidla jsou od nejkonkrétnějšího po nejobecnější\n\n----\n\n==Firewally==\n\'\'\'Typy:\'\'\'\n\n\'\'\'Filtrování paketů (packet filtering)\'\'\' – kontrola jednotlivých paketů\n\n\'\'\'Stavové filtrování (stateful filtering)\'\'\' – kontrola TCP toku (SYN, ACK) – pomalší než packet filtering, může mít více kritérií a pamatuje si historii, co se využívá hlavně proti útokům typu SYN attack atp. -> kontroluje zda pakety přichází v pořadí, jakém by měli, podle sekvenčních čísel\n\n\'\'\'Aplikační brána (Application gateway)\'\'\' – na úrovni aplikací, kontroluje aplikační protokol, zda neobsahuje něco co nemá, pro každý protokol musím mít podporu v aplikační bráně\n\n======Inkluzivní přístup ======\n# většina firewallových pravidel\n# Povoluje jen služby, které splňují pravidla, ostatní blokuje\n# Bezpečnější než exkluzivní přístup (propustí všechno, co není zakázané)\n\n======Stavové filtrování======\n# Provoz považován za dvousměrnou výměnu paketů v rámci relace\n# Keep-state, kt. udržuje stavové informaceo daném spojení – existuje tabulka spojení, která nám říká, která spojení chceme nadále udržovat\n# Keep-state automaticky generuje interní pravidla pro každý očekávaný paket v této relaci. To pravidlo tam existuje tak dlouho, dokud chodí pakety jedním směrem, čímž se obnovuje timeout, nebo dokud vyprší timeout. Timeouty se liší od protokolu\n\'\'\'Činnost stavového filtrování:\'\'\'\n\n1. Odcházející paket se zkontroluje v dynamické stavové tabulce\n\n# Pokud paket odpovídá očekávanému paketu relace (TCP) prochází. Stav relace je v tabulce aktualizován\n# Ostatní pakety se kontrolují podle výstupních pravidel\n2. Podobně pro přicházející pakety\n\n3. Po ukončení se zruší informace z dynamické stavové tabulky\n\n\n\n======Aplikace filtrování======\n\'\'\'Firewally\'\'\'\n# Filtrování provozu\n# Zahazování, propuštění definovaného provozu\n\'\'\'Detekční systémy IDS (Intrusion detection systems)\'\'\'\n# Pracují jako firewally, když dojde k nějaké akci, tak si ji zalogují, příp. pošlou e-mail\n# Mohou vyhledávat nejen na základě pravidel, ale i obsahu paketů (nejen hlavičky)\n# Vyhledávají na základě signatur (hledají řetězce nebezpečného chování)\n## kontrola provozu, monitorování dat\n## detekce útoků, neočekávaného chování\n## detekce na základě signatur či chování\n\'\'\'Prevenční systémy IPS (Intrusion prevention systems)\'\'\'\n# Reakce na útok -> odklonění či odfiltrování provozu\n\n----\n\n==Klasifikace paketů==\n\'\'\'Algoritmický problém:\'\'\'\n# Snažíme se roztřídit zprávy (pakety) podle zadaných pravidel\n# Cílem je co nejrychleji vyhledat ke každému příchozímu paketu pravidlo, jehož položky se shodují s hodnotami hlavičce paketu\n\n\'\'\'Má dvě fáze:\'\'\'\n# \'\'\'Předzpracování (pre-processing)\'\'\' – příprava a uspořádání databáze filtrovacích pravidel do datových struktur optimalizovaných pro vyhledávání\n# \'\'\'Klasifikace\'\'\' - dochází ke zpracování příchozího provozu a vyhledání dat z hlavičky paketu potřebných ke klasifikaci. Poté procházíme datovou struktorou pravidel, která byla vytvořena ve fázi předzpracování. Hodnoty z hlavičky paketu se porovnávají s hdnotami pravidel a hledá se nejlepší klasifikační pravidlo.\n\n\'\'\'Paket obsahuje K hlaviček (dimenzí):\'\'\'\n# \'\'\'Dimenze\'\'\' – typ hlavičky, kterou zkoumám – pokud zkoumám podle IP odesílatele, IP cíle, portu odesílatele, portu cíle, typu protokolu, tak mám 5 dimenzí\n\n\'\'\'Klasifikátor\'\'\' se skádá z pravidel R = {R1, R2, …, Rn} – množina pravidel, každé pravidlo obsahuje n-tici, která obsahuje K položek (počet dimenzí). Ne každá položka musí být vyplněna. Např. R1 = (147.229.*.*,*,25,*,*)\n\n----\n\n\'\'\'Typy porovnání:\'\'\'\n# Přesné porovnání (exact match)\n# Porovnání prefixu (prefix match)\n# Intervalové porovnání (range match)\n# Porovnání regulárního výrazu (regular expression match)\n\n====Typy vyhledávání====\n\'\'\'Podle dimenzí (počtu kontrolovaných polí v hlavičce):\'\'\'\n# Vyhledávání v jedné dimenzi (1D)\n# Vyhledávání ve dvou dimenzích (2D)\n# Vyhledávání ve více dimenzích (nD)\n\'\'\'Podle techniky vyhledávání:\'\'\'\n# Lineární vyhledávání (linear search)\n# Vyhledávání technikou rozděl a panuj (divide and conquer)\n# Stromové vyhledávání (tries, grid of tries)\n# Použití bitového vektoru (bit vector)\n# Vyhledávání pomocí vektorového součinu (cross producting)\n# Rozhodovací stromy (decision trees)\n\n\n\n\'\'\'Vyhledávání ve více dimenzích\'\'\'\n\n\'\'\'Vyhledávání podle více kritérií (položek hlavičky)\'\'\'\n# Časově i prostorově náročné – potřeba zvolit kompromisy\n# Ne všechny položky se stejně často používají\n# Metody se většinou zaměřují na optimální vyhledávání ve 2D\n\'\'\'Předpoklady pro použití heuristických metod:\'\'\'\n# Prefixy IP adres se porovnávají do maximálně 24 bitů\n# Průnik prefixů není obvyklý (zřídka např. 00* a 0001*)\n# Intervaly se v praxi příliš nepoužívají\n\n\n----\n\n=====Lineární vyhledávání=====\n# Nejjednodušší způsob klasifikace\n# Časová složitost O(N*K)\n# Vhodné pro malý počet pravidel\n# Postup: projdi postupně všechna pravidla z R a porovnej hodnoty ve všech dimenzích\n======Lineární vyhledávání ve více dimenzích======\n\'\'\'Lineární seznam pravidel\'\'\'\n# Preference dvojic (S, D)(zdrojová IP, cílová IP)\n# Kombinace 2D klasifikace + lineární průchod v dalších dimenzích\n# Každé pravidlo reprezentováno pouze jednou\n\n[[Soubor:linearni.png]]\n\n# Pro reprezentaci k-rozměrných pravidel použijeme vhodnou 2D reprezentaci (např. síť stromů trie), na kterou navážeme pro různé dvojice (S, D) lineární seznam pravidel, které odpovídají daným hodnotám (S, D) v pravidle\n\n\n----\n\n=====Stromové vyhledávání=====\n# Stromová struktura trie (prefixové vyhledávání)\n# Binární srromová struktura pro klasifikaci jedné dimenze (IP adresy)\n# Uzel označuje bit prefixu, cesta z uzlu Px ke kořeni tvoří prefix\n# Snadné procházení, vkládání, rušení\n\n[[Soubor:Trie_prefixy.png]]\n\n# Rychlé vyhledávání. Složitější je, že na počátku je potřebné z těchto pravidel vybudovat strom, což ale lze udělat offline\n# \'\'\'Přidání pravidla\'\'\' \n## přidání větev, uzlů, označení pravidla\n# \'\'\'Rušení pravidla\'\'\' \n## pokud je listem, zruším všechny uzly až po ten, ktrý se ještě využívá\n## pokud není, zruší se jen označení (např. P1)\n# Pokud procházením stromem skončím na pravidle, použiju ho, jinak se backtrackingem vrátím na předchozí vyhovující pravidlo\n\n\n\n======Rozšíření trie do dvou dimenzí======\n# Pro každou dimenzi strom trie – postupné vyhledávání\n# Exponenciální nárust prostorové složitosti O (N^k) – duplicita stromů\n[[Soubor:Trie_rozsireni.png]]\n\n\n\n======Grid of tries bez duplicit, se zpětným vyhledáváním======\n# Menší prostorová složitost (bez duplicit), větší časová náročnost\n# Použití algoritmu zpětného vyhledávání (backtracking)\n# Konstrukce stromu je jednodušší, ale je složitější vyhledávání (musí se vracet)\n[[Soubor:Trie_backtracking.png]]\n\n\n\n======Grid of tries se zpětným vyhledáváním a ukazateli======\n# Pro každý bod v srcTrie přepočítá ukazatel na další možný strom\n# Snížení časové složitosti – rychlejší průchod stromem\n# Vyhledání prefixu (001, 001)(D,S) – při neúspěchu v x přechod na y\n# Měly bychom být schopné na základě pravidel vytvořit strom\n[[Soubor:Trie_ukazatele.png]]\n\n----\n\n=====Metody typu rozděl a panuj=====\n# Využívá myšlenku rozdělení problému na jednodušší podčásti, které se zpracují nezávisle a celkový výsledek se složí z dílčích výsledků\n# Prohledává jednotlivé množiny (dimenze) pomocí efektivních jednodimenzionálních metod\n# \'\'\'Tři způsoby implementace této metody:\'\'\'\n## Lineární prohledávání pomocí bitového vektoru\n## Použití kartézského součinu\n## Metoda rekurzivní klasifikace toků\n\n======Lineární vyhledávání pomocí bitového vektoru======\n# Bitový vektor obsahuje výskyt prefixu v množině pravidel\n# Celkový bitový vektor je průnikem dílčích výsledků (bitový AND)\n# Touhle metodou je možné zpracovávat paralelně\n\n[[Soubor:Bit_vector.png]]\n\nPříklad: vyhledání H = (147.229.5.1, 147.228.15.1, 53, 1029, UDP)\n\n111011, 111001, 010011, 111011, 110111 = 010001\n\n\n\n======Klasifikace pomocí kartézského součinu======\n# Vytvoří vhodné datové struktury pro hledání v jednotlivých množinách\n# Tyto struktury (např. jednodimenzionální stromy trie) provádějí nejdelší prefixovou shodu nad odpovídajícími položkami z hlavičky paketu\n# Abychom určili nejlepší prefixové pravidlo, musíme vytvořit tabulku kartézského součinu\n# Tato tabulka obsahuje pro každý vektor kartézského součinu předpočítané pravidlo pro nejlepší shodu\n\n[[Soubor:Kartez_soucin1.png]]\n\n# Pokud klasifikátor neobsahuje univerzální pravidlo (*,*,*,*,*), může se stát, že pro daou kombinaci položek vektoru neexistuje žádné pravidlo\n# Pokud neexistuje žádné vyhovující klasifikační pravidlo pro vektor, jedná se o tzv. prázdný kartézský součin\n# Prefixové vyhledávání v jednotlivých dimenzích lze implementovat paralelně\n\n[[Soubor:Kartez_soucin2.png]]\n\n# Exponenciální nárust prostorové složitosti talbulky\n# V nejhorším případě N^k, kde k je počet dimenzí a N počet prvků\n\n\n\n======Metoda rekurzivní klasifikace toků======\n# Rozšířením metody kartézského součinu v kombinaci s bitovým vektorem\n# Řeší exponenciální nárust záznamů při použití kartézského součinu\n# Mnohé kombinace prefixů jednotlivých dimenzí (vektorů) odpovídají stejné množině klasifikačních pravidel\n# Ty vektory, které mají stejné pravidla, tvoří třídu ekvivalence\n# Princip této metody je založen na výpočtu dílčích kartézských součinů nad třídami ekvivalence\n# Celkový výsledek netvoříme skládáním dílčích kartézských součinů, ale kombinací vypočtených tříd ekvivalence -> významně se tím redukují paměťové nároky\n\n[[Soubor:Rekurzivni_klasifikace.png]]\n\n==Zajištění kvality služeb==\n\n====Přizpůsobení provozu z pohledu kvality====\n\n=====Značení paketů (packet marking) – klasifikace=====\n=====Omezení provozu (traffic policing)===== \n# slouží k řízení maximální rychlosti individuálního toku či agregovaných toků\n# každému toku je přiřazen odpovídající profil přenosu dat\n# profil definuje rchlostní a přenosové parametry toku\n# pokud daný tok překročí tyto parametry, jsou pakety z toku zahozeny nebo označeny nižší prioritou\n# nedochází ke zpoždění, ale za cenu ztrát\n=====Rozložení provozu (traffic shaping)=====\n# slouží k regulaci rychlosti a objemu provozu jednotlivých toků\n# rozložení provozu v čase na určitou rychlost a zajištění splnění podmínek SLA\n# rozprostře shluky paketů tak, aby nedošlo k překročení maximální povolené přenosové kapacity\n# malá ztrátovost, ale zpoždění\n[[Soubor:traffic.png]]\n\n\'\'\'Zajištění QoS na internetu\'\'\'\n# SLA – Service Level Agreement – definované požadavky zákazníka (je to dohoda). Specifikuje nároky na přenos zákaznicných dat – obvykle nárok na fyzické připojení k síti (dostupnost a propustnost)\n# Většinou, když provider přijímá data, tak na výstupu se provádí traffic shaping – rozkládám provoz tak, aby se přenášel všechen\n# Na vstupu (kde mám já zaplacené služby) se provádí marking a policing – označení vstupních paketů a ořežání špiček\n# Na základě označení to přenáším po síti, kterou mám pod kontrolou a pak na výstupu opět provedu shaping\n\n[[Soubor:Qos_net.png]]\n\n----\n\n====Plánování QoS pomocí front====\n# Fronta je abstraktní datová struktura, může být softwarová nebo hardwarová. Většinou když přichází data, ukládají se do HW fronty a potom se překlasifikovávájí a ukládají do SW front\n\n\'\'\'Spracování paketu na síťovém zařízení\'\'\'\n# přijde do hw fronty a zjišťuje zda je fronta plná nebo ne. \n# Pokud je fronta plná, předává se to do sw front, pokud jsou vytvořené a čeká to tam.\n# Pokud je fronta prázdná, rovnou tojde na výstup a přeposílá se to – pokud zařízení není zahlcené, tak bez ohledu na klasifikaci pakety jdou na výstup a nedochází ke zpoždění nebo předbíhání paketů. \n# Teprve až se výstupní fronta začne zaplňovat, přicházejí ke slovu techniky sw fronty, klasifikace a způsob odbavení.\n# Pokud jsou sw fronty zahlcené, tak se to zahazuje\n# Fronty jsou seřazeny podle priority – při určitém nastavení front se může stát, že prioritnější provoz je zahazován, protože fronta nemá dostatečnou kapacitu\n\n----\n\n======Fronta typu FIFO (First In-First Out)======\n[[Soubor:fifo.png]]\n\n# Dobře se implementují\n# Řazení výstupních paketů v pořadí jak přicházejí\n# Fronta FIFO neřeší priority\n# Předvídatelné zpoždění paketů – D = B/R\n## B – velikost fronty\n## R – rychlost linky\n\n\n----\n\n======Prioritní fronty PQ (Priority Queue)======\n[[Soubor:pq.png]]\n# Více prioritních tříd – třídění závisí na přijaté politice\n# Každá třída má vlastní výstupní frontu\n# Riziko vyhladovění – dokud není prázdná prioritnější fronta, tak se neodbavují další\n# V praxi se prioritní fronty kombinují ještě s jinými frontami\n\n----\n\n======Cyklické fronty RR (Round Robin)======\n[[Soubor:rr.png]]\n# Každá fronta odpovídá jednomu toku (z celkem n)\n# Cyklická obsluha všech front\n# Rychlost obsluhy je R/n\n# V jednom cylku se z každé fronty odebere stejný počet paketů (bitů)\n# Pokud je fronta prázdná, pokračuje se obsluhou nejbližší neprázdné fronty\n\n\'\'\'Deficitní cyklické fronty\'\'\' – mají jakési počítadlo, které určuje, kolik by se mělo za dané kolečko odebrat – pokud je extra velký paket, může se čekat pár kol, než se odebere\n\n----\n\n======Váhové fronty WFQ (Weighted Fair Queue)======\n[[Soubor:wfq.png]]\n# Pro každý tok jedna fronta- dynamické vytváření a zánik\n# Váha určuje počet odebraných paketů fronty\n# Podobné jako round robin, ale je určená váha dat frokaždou frontu\n# Můžu jimi velmi přesně říct, jaké má být přenosové pásmo jakéhokoli provozu\n# Pokud mám provoz a chci dát např 50% na RTP, 20% na SIP a zbytek na webové služby, tak nastavím v tomto poměru váhy a přenosové pásmo se v tomhle poměru bude přidělovat\n# Dochází k přeskládání, ale na rozdíl od prioritních front nedochází k vyhladovění (a jistým způsobem je možné prioritu nastavit\n\n----\n\n====Mechanismus Leaky Bucket====\n# Máme nádobu ve které je díra. Nějakou rychlostí z kohoutku teče voda a nějako to zase dolu odtéká pryč. Pokud rychlost odtékání je menší než rychlost přitékání, tak semi to začne plnit. A až se mi to zaplní, začne přetékat přes okraj.\n\'\'\'U sítí:\'\'\'\n# Vnutí vstupnímu provozu, který je obvykle tvořen nepravidelnými shluky dat, stálý výstup\n# Do vědra (fronty) přichází neregulovaný datový tok\n# Pakety odcházejí dírou ve dně vědra a jsou přenáseny do sítě rychlostí r bytů za sekundu\n# Velikost vědra je omezena na b bytů\n# Pokud algoritmus má frontu (b > 0), jedná se o rozložení provozu (traffic shaping), při kterém může dojít ke zpoždění paketů přicházejících větší rychlostí než r\n# Jestliže je velikost fronty nulová, jedná se o ořezání provozu (traffic policing)\n\n\n\n====Mechanismus Token Bucket====\n# Po mnoho aplikací je vhodnější krátkodobě povolit překročení výstupní rychlosti tak, aby vstupní shluk dat mohl projít bez zahození\n# Máme vědro, které může uchovat až b žetonů (tokens). \n# Žetony se generují rychlostí r žetonů za sekundu a vkládají se do vědra\n# Žeton odpovídá povolení přeposlat jeden byte\n# Pokud obsahuje vědro méně než b žetonů, je do něj žeton vložen\n# V případě plného vědra je žeton zahozen\n# Maximální shluk dat, který může poslat naráz, má velikost b\n# Předtím, než může paket vstoupit do sítě, musí být prvně odstraněn jeden žeton z vědra\n# Pokud je vědro prázdné, musí paket počkat, než se žeton vygeneruje (Traffic shaping)\n# Traffic policing v tom případě, že není žádná fronta pr oukládání paketů\n\n\n\n\'\'\'Tři základní kritéria pro ořezání:\'\'\'\n\n\'\'\'Průměrná rychlost (average rate)\'\'\' – k omezení dlouhodobé přuměrné rychlosti\n\n\'\'\'Rychlost ve špičce (peak rate)\'\'\' – maximální počet paketů během kratší časové periody\n\n\'\'\'Velikost shluků (burst size)\'\'\' – limit maximálního počtu paketů, které jsou poslány do sítě během extrémně krátkého časového intervalu (omezení velikosti shluku paketů)\n\n----\n\n====Integrované služby====\n# Snaží se na vždy specifikovat zdroje, které daný provoz/tok konkrétně vyžaduje, udělat tam rezervaci přenosové kapacity, příp. kapacity pro zpracování. Pokud toto existuje, tak se vytvoří taková cesta pro ten tok a zajistí se tam požadovaná kvalita toho toku.\n# Pokud zařízení neumožňuje pokrýt všechny požadavky, které tam pomocí integrovaných služeb přijdou, tak to odmítne a máme možnost to buď poslat někam jinam, s jinou kvalitou, nebo vůbec. Tzn. zařízení mi řekne, že v této kvalitě ta data není schopné přenést\n# Dá se použít pro jednotlivé toky, ne páteřní směrovače, kde jsou jich tisíce\n\n\n\'\'\'Obsahují pouze malý počet tříd (tři základní), jemnější dělení neumožňuje:\'\'\'\n# \'\'\'garantované služby\'\'\' – říkají, jaké je maximální zpoždění, které můžeme na zařízení dosáhnout – striktní omezení zpoždění ve frontách\n# \'\'\'kontrolování zátěže\'\'\' – zajišťují, že provoz prochází v takové kvalitě, jako kdyby prvek nebyl zatížený\n# \'\'\'největší úsilí\'\'\' – bez toho aby se vytvářela rezervace – běžná kvalita nad IP\n\n=====Rezervační protokol RSVP=====\n# Aplikační protokol, kt. vytváří spojení od přijímače k vysílanému zdroji\n# Je to signalizační protokol pro rezervaci zdrojů na síťových prvcích\n# RSVP vyžaduje určitou režii- než dojde k přenosu se musí ustavit spojení a rezervace zdrojů\n# Rezervace pásma v multicastových stromech – provádí je pomocí jakýchsi proměnných jako rychlost přenosového pásma, velikost zásobníku tokenů\n# Pokud více stanic pošle žádost o rezervaci, může dojít k tomu, že se ty rezervace spojí do jedné a rezervuje se jeden kanál s danými vlastnostmi, ve kterém potečou data všech žadatelů/příjemců\n# Žádost o rezervaci provádí koncová stanice (receiver-oriented) – přijímač, ne zdroj vysílání\n# Rezervace zdrojů se používá jen v sítích pod jednou administrací (aby si nemohl kdokoliv cokoliv rezervovat)\n# Zařízení, které tvoří infrastrukturu sítě musí mít poporu RSVP (a až poté je možné vytvorit rezervované přenosové pásmo)\n# Rezervace se provádí pro tok\n# Výhoda: garantuje pro daný tok kvalitu, jakou jsme požadovali\n# Nevýhoda: režie a složitost (pokud by každý tok měl mít rezervaci pásma)\n\n----\n\n====Diferenciované služby====\n# Nepracují na základě toků, ale na základě paketů a hlavním cílem je diferenciovat pakety do určitých tříd a pro dané třídy se definují politiky\n# Pakety stejné třídy se posílají se stejnou prioritou\n# Máme koncová zařízení, která vysílají pakety, které chceme s určitou kvalitou služeb doručit. Pokud paket dorazí na vstupní směřovač dané sitě pod jednou správou (většinou providera), tak podle typu paketů dojde ke klasifikaci.\n# Paket je označen (u IP políčko ToS – type of service) a v rámci sítě toho providera jsou nadefinované politiky zpracování jedn. tříd na každém aktivním prvku \n# Flexibilní a rozšiřitelné (z pohledu definice tříd)\n# Umožňuje rychlé přeposílání, protože routery uvnitř sítě neprovádí žádnou klasifikaci, jen když přijde paket, podívají se na IP precedens a přepošlou ho do dané fronty\n# Dřív se ale zjistí, kam paket směruje, a až pak se to umístí do výstupní fronty (ta funguje podle politiky, kterou jsme definovali)\n# Z hlavičky se používá IP precedence, která definuje 3 bity v políčku ToS. Další 4 bity jsou podle definice nevyužité a pak je tam ještě rezervní bit\n# Později to nějaké RFC předefinovalo, a řeklo že to už nebude ToS, ale DS a prvních 6 bitů bude DSCP kód – ten říká, s s jakou precedensí se to posílá a s jakou pravděpodobností se to zahazuje, když dochází k zahlcení\n# Přijde paket, provede se klasifikace, pak se označí (přidělí se třída daného provozu v ToS nebo DSCP), pak se přepošle dál, a podle toho jk je označen a jak jsou zaplněné fronty se přepole dál nebo zahodí\n\n\n\'\'\'Třídy, jak s oklasifikovanými pakety zacházet:\'\'\'\n======Přednostní přeposílání EF (Expedited Forwarding)======\n# výstupní rychlost odeslání paketů dané třídy musí být stejná nebo vyšší než nakonfigurovaná rychlost\n# garantováno bez ohledu na intenzitu ostatního provozu\n======Garantované přeposílání AF (Assured Forwarding)======\n# rozděluje provoz do 4 tříd – AF1 až AF4\n# každé třídě je zaručena určitá přenosová rychlost\n# každá ze tříd definuje tři druhy zahazování paketů\n# pokud dojde k zahlcení linky, směrovač může zahodit pakety na základě preference zahazování\n[[Soubor:af.png]]\n# \'\'\'Low Drop Prec\'\'\' – pokud dojde k zahlcení, tento paket se bude zahazovat poslední z paketů stejné třídy\n# \'\'\'High Drop Prec\'\'\' – pokud dojde k zahlcení, zahoďte mě!\n[[Soubor:high_drop.png]]\n======Best Effort======\n# implicitní třída, která se použije pokud není hodnota DSCP namapovaná na nějakou politiku\n\n----\n\n====Prevence zahlcení RED a WRED====\n# Vychází z toho, že jednou se každá fronta zahltí\n# Když se fronta začne zaplňovat, panika, co budeme dělat?\n## můžeme čekat, až se zaplní, a pak všechno zahazovat\n## RED a WRED – pokud se fronta začne zaplňovat ale ještě nebude plná, začnu náhodně zahazovat některé pakety – fronta se hned nezahltí\n\n======RED======\n# Máme dva body, Qmin a Qmax – definice vstupní fronty\n# Do vstupní fronty přichází pakety. Pokud velikost fronty nedosáhla Qmin, pakety se zahazují s nulovou pravděpodobností\n# S narůstající frontou se mi zvyšuje pravděpodobnost zahazování\n# Jakmile se fronta zaplní úplně, všechny pakety se zahazují\n# Generují se náhodná čísla, pokud spadne do intervalu, paket se zahodí\n[[Soubor:red.png]]\n\n======WRED======\n# Váhový RED (Weighted RED)\n# Nezahazuje pakety jen na základě toho, kdy přišly, ale zajímá ho i precedens\n# Data s lepší prioritou se začnou zahazovat později\n[[Soubor:wred.png]]\n\n----\n\n==Směrovací algoritmy==\n====Link-state====\n# Link-state protokol sleduje stav a typ připojení každé linky\n# Zná topologii celé sítě – ví, která linka je up nebo down\n# Počítá „cenu“ za kterou se tam dostane\n# Vybere cestu, která prochází více uzly, ale má rychlejší médium, před přímější cestou s pomalým médiem\n# Větší hardwarové nároky (protože víme, jak celá síť vypadá)\n[[Soubor:Link_state.png]]\n\n\'\'\'Používá Dijkstrův algoritmus:\'\'\' \n# Funguje nad hranově kladně ohodnoceným algoritmem\n# Algoritmus si pro každý vrchol (uzel) pamatuje délku nejkratší cesty, jakou se k němu dá dostat\n# Začátek cesty je vždy aktuální směrovač\n# Iterativní výpočet\n\n======OSPF – Open Shortest Path First======\n# Provádí změny v routovacích tabulkách na základě změny stavu sítě\n# V pravidelných krátkých intervalech si routry speciálními zprávami kontrolují spojení se sousedními routery\n# Při zjištění jakékoli změny zasílá oznámení všem routerům v síti, ty si pak přepočítají cesty a upraví směrovací tabulky\n# O výměnu souhrnných informací mezi oblastmi se starají hraniční routery\n# \'\'\'Výhody:\'\'\'\n## velmi rychlá konvergence\n## možnost členit velké oblasti na menší zóny\n# \'\'\'Nevýhody:\'\'\'\n## paměťově a výpočetně náročné\n\n----\n\n====Distance-vector====\n# Získává informace od sousedícího routru\n# Protože je závislý na informacích od souseda, který je získal zas od dalšího soudeda, nazývá se to „routing by rumor“\n# Periodicky zasílá směrovací updaty všem svým sousedům broadcastováním jejich směrovacích tabulek \n# Počítá „cenu“ za kterou se tam dostane, obyčejně je to počet uzlů, které musí projít do cíle (například cíl A je 5 uzlů daleko)\n# Distance vector je lepší v případě, že všechny linky v síti mají stejnou rychlost\n[[Soubor:Distance_vector.png]]\n\n======RIP – Routing Information Protocol======\n# Patří mezi nejstarší směrovací protokoly\n# Používá Bellman-Fordův algoritmus (pomalší verze Dijkstrova, která může mít i záporně ohodnocené hrany)\n# Metrikou směrování je počet skoků k cilové síti (hop count)\n# Jako ochrana proti směrovacím smyčkám je implementovaný omezený počet směrovačů na cestě k cíli (max. 15)\n# To omezuje také velikost sítě, ve které je možné RIP použít\n# 16 hopů je nekonečná vzdálenost, označení nepřístupných, nepoužitelných směrovacích tras\n\n\'\'\'RIPv1\'\'\'\n# Nezná masku, proto musí být všechny podsítě stejně velké (se stejnou maskou)\n# Neexistuje autentizace\n\n\'\'\'RIPv2\'\'\'\n# Přidána autentizace, hesla ale ve formě nekódovaného textu\n# Možnost přenášet informace o masce sítě\n# Vysílá sousedům svou směrovací tabulku pomocí multicastu\n\n\'\'\'RIPng\'\'\'\n# Podpora IPv6','utf-8'),(443,'==Filtrování paketů==\n=====Filtrovací pravidla=====\n# Slouží pro filtrování vstupního a výstupního provozu\n# Kontrolují provoz (data propustí nebo zablokují (roztřídit a nad každou skupinou provést nějaké pravidlo)\n# Filtruje se nejčastěji podle: čísla protokolu, zdrojové/cílové IP, zdrojový/cílový port...\n[[Soubor:Packet_filter.png]]\n\n# Když přichází paket do zařízení, tak zjiťujeme zda tam ten paket patří a jestli je tm nějaký vstupní filtr. Pokud jsou pravidla nastavené na routru, paket se porovná s filtrovacími pravidly, a podle toho se buď pošle dál, nebo se zlikviduje. Pokud je povolený, postupuje dál do počítače. Tam se zpracovává, hledá se ve směrovací tabulce nejlepší shoda cílové adresy paketu. Pokus se položka nejde, začne se zpracovávat, jinak se zahodí.\n\n=====Formát filtrovacích pravidel=====\n<number> <action> <protocol> from <src IP> to <dst IP> [src-port <src port>] [dst-port <dst port>] [<flags>] [<options>]\n\nNapř.:\n\n10 permit TCP from 147.229.0.0 to any dst-port 80 (povolení internetového provozu)\n\n30 permit UDP from any to 147.229.0.0 src-port 53 (přijímání odpovědí DNS)\n\n# Záleží na pořadí, protože se vybírá první vyhovující, a ne nejlepší vyhovující\n# Pravidla jsou od nejkonkrétnějšího po nejobecnější\n\n----\n\n==Firewally==\n\'\'\'Typy:\'\'\'\n\n\'\'\'Filtrování paketů (packet filtering)\'\'\' – kontrola jednotlivých paketů\n\n\'\'\'Stavové filtrování (stateful filtering)\'\'\' – kontrola TCP toku (SYN, ACK) – pomalší než packet filtering, může mít více kritérií a pamatuje si historii, co se využívá hlavně proti útokům typu SYN attack atp. -> kontroluje zda pakety přichází v pořadí, jakém by měli, podle sekvenčních čísel\n\n\'\'\'Aplikační brána (Application gateway)\'\'\' – na úrovni aplikací, kontroluje aplikační protokol, zda neobsahuje něco co nemá, pro každý protokol musím mít podporu v aplikační bráně\n\n======Inkluzivní přístup ======\n# většina firewallových pravidel\n# Povoluje jen služby, které splňují pravidla, ostatní blokuje\n# Bezpečnější než exkluzivní přístup (propustí všechno, co není zakázané)\n\n======Stavové filtrování======\n# Provoz považován za dvousměrnou výměnu paketů v rámci relace\n# Keep-state, kt. udržuje stavové informaceo daném spojení – existuje tabulka spojení, která nám říká, která spojení chceme nadále udržovat\n# Keep-state automaticky generuje interní pravidla pro každý očekávaný paket v této relaci. To pravidlo tam existuje tak dlouho, dokud chodí pakety jedním směrem, čímž se obnovuje timeout, nebo dokud vyprší timeout. Timeouty se liší od protokolu\n\'\'\'Činnost stavového filtrování:\'\'\'\n\n1. Odcházející paket se zkontroluje v dynamické stavové tabulce\n\n# Pokud paket odpovídá očekávanému paketu relace (TCP) prochází. Stav relace je v tabulce aktualizován\n# Ostatní pakety se kontrolují podle výstupních pravidel\n2. Podobně pro přicházející pakety\n\n3. Po ukončení se zruší informace z dynamické stavové tabulky\n\n\n\n======Aplikace filtrování======\n\'\'\'Firewally\'\'\'\n# Filtrování provozu\n# Zahazování, propuštění definovaného provozu\n\'\'\'Detekční systémy IDS (Intrusion detection systems)\'\'\'\n# Pracují jako firewally, když dojde k nějaké akci, tak si ji zalogují, příp. pošlou e-mail\n# Mohou vyhledávat nejen na základě pravidel, ale i obsahu paketů (nejen hlavičky)\n# Vyhledávají na základě signatur (hledají řetězce nebezpečného chování)\n## kontrola provozu, monitorování dat\n## detekce útoků, neočekávaného chování\n## detekce na základě signatur či chování\n\'\'\'Prevenční systémy IPS (Intrusion prevention systems)\'\'\'\n# Reakce na útok -> odklonění či odfiltrování provozu\n\n----\n\n==Klasifikace paketů==\n\'\'\'Algoritmický problém:\'\'\'\n# Snažíme se roztřídit zprávy (pakety) podle zadaných pravidel\n# Cílem je co nejrychleji vyhledat ke každému příchozímu paketu pravidlo, jehož položky se shodují s hodnotami hlavičce paketu\n\n\'\'\'Má dvě fáze:\'\'\'\n# \'\'\'Předzpracování (pre-processing)\'\'\' – příprava a uspořádání databáze filtrovacích pravidel do datových struktur optimalizovaných pro vyhledávání\n# \'\'\'Klasifikace\'\'\' - dochází ke zpracování příchozího provozu a vyhledání dat z hlavičky paketu potřebných ke klasifikaci. Poté procházíme datovou struktorou pravidel, která byla vytvořena ve fázi předzpracování. Hodnoty z hlavičky paketu se porovnávají s hdnotami pravidel a hledá se nejlepší klasifikační pravidlo.\n\n\'\'\'Paket obsahuje K hlaviček (dimenzí):\'\'\'\n# \'\'\'Dimenze\'\'\' – typ hlavičky, kterou zkoumám – pokud zkoumám podle IP odesílatele, IP cíle, portu odesílatele, portu cíle, typu protokolu, tak mám 5 dimenzí\n\n\'\'\'Klasifikátor\'\'\' se skádá z pravidel R = {R1, R2, …, Rn} – množina pravidel, každé pravidlo obsahuje n-tici, která obsahuje K položek (počet dimenzí). Ne každá položka musí být vyplněna. Např. R1 = (147.229.*.*,*,25,*,*)\n\n----\n\n\'\'\'Typy porovnání:\'\'\'\n# Přesné porovnání (exact match)\n# Porovnání prefixu (prefix match)\n# Intervalové porovnání (range match)\n# Porovnání regulárního výrazu (regular expression match)\n\n====Typy vyhledávání====\n\'\'\'Podle dimenzí (počtu kontrolovaných polí v hlavičce):\'\'\'\n# Vyhledávání v jedné dimenzi (1D)\n# Vyhledávání ve dvou dimenzích (2D)\n# Vyhledávání ve více dimenzích (nD)\n\'\'\'Podle techniky vyhledávání:\'\'\'\n# Lineární vyhledávání (linear search)\n# Vyhledávání technikou rozděl a panuj (divide and conquer)\n# Stromové vyhledávání (tries, grid of tries)\n# Použití bitového vektoru (bit vector)\n# Vyhledávání pomocí vektorového součinu (cross producting)\n# Rozhodovací stromy (decision trees)\n\n\n\n\'\'\'Vyhledávání ve více dimenzích\'\'\'\n\n\'\'\'Vyhledávání podle více kritérií (položek hlavičky)\'\'\'\n# Časově i prostorově náročné – potřeba zvolit kompromisy\n# Ne všechny položky se stejně často používají\n# Metody se většinou zaměřují na optimální vyhledávání ve 2D\n\'\'\'Předpoklady pro použití heuristických metod:\'\'\'\n# Prefixy IP adres se porovnávají do maximálně 24 bitů\n# Průnik prefixů není obvyklý (zřídka např. 00* a 0001*)\n# Intervaly se v praxi příliš nepoužívají\n\n\n----\n\n=====Lineární vyhledávání=====\n# Nejjednodušší způsob klasifikace\n# Časová složitost O(N*K)\n# Vhodné pro malý počet pravidel\n# Postup: projdi postupně všechna pravidla z R a porovnej hodnoty ve všech dimenzích\n======Lineární vyhledávání ve více dimenzích======\n\'\'\'Lineární seznam pravidel\'\'\'\n# Preference dvojic (S, D)(zdrojová IP, cílová IP)\n# Kombinace 2D klasifikace + lineární průchod v dalších dimenzích\n# Každé pravidlo reprezentováno pouze jednou\n\n[[Soubor:linearni.png]]\n\n# Pro reprezentaci k-rozměrných pravidel použijeme vhodnou 2D reprezentaci (např. síť stromů trie), na kterou navážeme pro různé dvojice (S, D) lineární seznam pravidel, které odpovídají daným hodnotám (S, D) v pravidle\n\n\n----\n\n=====Stromové vyhledávání=====\n# Stromová struktura trie (prefixové vyhledávání)\n# Binární srromová struktura pro klasifikaci jedné dimenze (IP adresy)\n# Uzel označuje bit prefixu, cesta z uzlu Px ke kořeni tvoří prefix\n# Snadné procházení, vkládání, rušení\n\n[[Soubor:Trie_prefixy.png]]\n\n# Rychlé vyhledávání. Složitější je, že na počátku je potřebné z těchto pravidel vybudovat strom, což ale lze udělat offline\n# \'\'\'Přidání pravidla\'\'\' \n## přidání větev, uzlů, označení pravidla\n# \'\'\'Rušení pravidla\'\'\' \n## pokud je listem, zruším všechny uzly až po ten, ktrý se ještě využívá\n## pokud není, zruší se jen označení (např. P1)\n# Pokud procházením stromem skončím na pravidle, použiju ho, jinak se backtrackingem vrátím na předchozí vyhovující pravidlo\n\n\n\n======Rozšíření trie do dvou dimenzí======\n# Pro každou dimenzi strom trie – postupné vyhledávání\n# Exponenciální nárust prostorové složitosti O (N^k) – duplicita stromů\n[[Soubor:Trie_rozsireni.png]]\n\n\n\n======Grid of tries bez duplicit, se zpětným vyhledáváním======\n# Menší prostorová složitost (bez duplicit), větší časová náročnost\n# Použití algoritmu zpětného vyhledávání (backtracking)\n# Konstrukce stromu je jednodušší, ale je složitější vyhledávání (musí se vracet)\n[[Soubor:Trie_backtracking.png]]\n\n\n\n======Grid of tries se zpětným vyhledáváním a ukazateli======\n# Pro každý bod v srcTrie přepočítá ukazatel na další možný strom\n# Snížení časové složitosti – rychlejší průchod stromem\n# Vyhledání prefixu (001, 001)(D,S) – při neúspěchu v x přechod na y\n# Měly bychom být schopné na základě pravidel vytvořit strom\n[[Soubor:Trie_ukazatele.png]]\n\n----\n\n=====Metody typu rozděl a panuj=====\n# Využívá myšlenku rozdělení problému na jednodušší podčásti, které se zpracují nezávisle a celkový výsledek se složí z dílčích výsledků\n# Prohledává jednotlivé množiny (dimenze) pomocí efektivních jednodimenzionálních metod\n# \'\'\'Tři způsoby implementace této metody:\'\'\'\n## Lineární prohledávání pomocí bitového vektoru\n## Použití kartézského součinu\n## Metoda rekurzivní klasifikace toků\n\n======Lineární vyhledávání pomocí bitového vektoru======\n# Bitový vektor obsahuje výskyt prefixu v množině pravidel\n# Celkový bitový vektor je průnikem dílčích výsledků (bitový AND)\n# Touhle metodou je možné zpracovávat paralelně\n\n[[Soubor:Bit_vector.png]]\n\nPříklad: vyhledání H = (147.229.5.1, 147.228.15.1, 53, 1029, UDP)\n\n111011, 111001, 010011, 111011, 110111 = 010001\n\n\n\n======Klasifikace pomocí kartézského součinu======\n# Vytvoří vhodné datové struktury pro hledání v jednotlivých množinách\n# Tyto struktury (např. jednodimenzionální stromy trie) provádějí nejdelší prefixovou shodu nad odpovídajícími položkami z hlavičky paketu\n# Abychom určili nejlepší prefixové pravidlo, musíme vytvořit tabulku kartézského součinu\n# Tato tabulka obsahuje pro každý vektor kartézského součinu předpočítané pravidlo pro nejlepší shodu\n\n[[Soubor:Kartez_soucin1.png]]\n\n# Pokud klasifikátor neobsahuje univerzální pravidlo (*,*,*,*,*), může se stát, že pro daou kombinaci položek vektoru neexistuje žádné pravidlo\n# Pokud neexistuje žádné vyhovující klasifikační pravidlo pro vektor, jedná se o tzv. prázdný kartézský součin\n# Prefixové vyhledávání v jednotlivých dimenzích lze implementovat paralelně\n\n[[Soubor:Kartez_soucin2.png]]\n\n# Exponenciální nárust prostorové složitosti talbulky\n# V nejhorším případě N^k, kde k je počet dimenzí a N počet prvků\n\n\n\n======Metoda rekurzivní klasifikace toků======\n# Rozšířením metody kartézského součinu v kombinaci s bitovým vektorem\n# Řeší exponenciální nárust záznamů při použití kartézského součinu\n# Mnohé kombinace prefixů jednotlivých dimenzí (vektorů) odpovídají stejné množině klasifikačních pravidel\n# Ty vektory, které mají stejné pravidla, tvoří třídu ekvivalence\n# Princip této metody je založen na výpočtu dílčích kartézských součinů nad třídami ekvivalence\n# Celkový výsledek netvoříme skládáním dílčích kartézských součinů, ale kombinací vypočtených tříd ekvivalence -> významně se tím redukují paměťové nároky\n\n[[Soubor:Rekurzivni_klasifikace.png]]\n\n==Zajištění kvality služeb==\n\n====Přizpůsobení provozu z pohledu kvality====\n\n=====Značení paketů (packet marking) – klasifikace=====\n=====Omezení provozu (traffic policing)===== \n# slouží k řízení maximální rychlosti individuálního toku či agregovaných toků\n# každému toku je přiřazen odpovídající profil přenosu dat\n# profil definuje rchlostní a přenosové parametry toku\n# pokud daný tok překročí tyto parametry, jsou pakety z toku zahozeny nebo označeny nižší prioritou\n# nedochází ke zpoždění, ale za cenu ztrát\n=====Rozložení provozu (traffic shaping)=====\n# slouží k regulaci rychlosti a objemu provozu jednotlivých toků\n# rozložení provozu v čase na určitou rychlost a zajištění splnění podmínek SLA\n# rozprostře shluky paketů tak, aby nedošlo k překročení maximální povolené přenosové kapacity\n# malá ztrátovost, ale zpoždění\n[[Soubor:traffic.png]]\n\n\'\'\'Zajištění QoS na internetu\'\'\'\n# SLA – Service Level Agreement – definované požadavky zákazníka (je to dohoda). Specifikuje nároky na přenos zákaznicných dat – obvykle nárok na fyzické připojení k síti (dostupnost a propustnost)\n# Většinou, když provider přijímá data, tak na výstupu se provádí traffic shaping – rozkládám provoz tak, aby se přenášel všechen\n# Na vstupu (kde mám já zaplacené služby) se provádí marking a policing – označení vstupních paketů a ořežání špiček\n# Na základě označení to přenáším po síti, kterou mám pod kontrolou a pak na výstupu opět provedu shaping\n\n[[Soubor:Qos_net.png]]\n\n----\n\n====Plánování QoS pomocí front====\n# Fronta je abstraktní datová struktura, může být softwarová nebo hardwarová. Většinou když přichází data, ukládají se do HW fronty a potom se překlasifikovávájí a ukládají do SW front\n\n\'\'\'Spracování paketu na síťovém zařízení\'\'\'\n# přijde do hw fronty a zjišťuje zda je fronta plná nebo ne. \n# Pokud je fronta plná, předává se to do sw front, pokud jsou vytvořené a čeká to tam.\n# Pokud je fronta prázdná, rovnou tojde na výstup a přeposílá se to – pokud zařízení není zahlcené, tak bez ohledu na klasifikaci pakety jdou na výstup a nedochází ke zpoždění nebo předbíhání paketů. \n# Teprve až se výstupní fronta začne zaplňovat, přicházejí ke slovu techniky sw fronty, klasifikace a způsob odbavení.\n# Pokud jsou sw fronty zahlcené, tak se to zahazuje\n# Fronty jsou seřazeny podle priority – při určitém nastavení front se může stát, že prioritnější provoz je zahazován, protože fronta nemá dostatečnou kapacitu\n\n----\n\n======Fronta typu FIFO (First In-First Out)======\n[[Soubor:fifo.png]]\n\n# Dobře se implementují\n# Řazení výstupních paketů v pořadí jak přicházejí\n# Fronta FIFO neřeší priority\n# Předvídatelné zpoždění paketů – D = B/R\n## B – velikost fronty\n## R – rychlost linky\n\n\n----\n\n======Prioritní fronty PQ (Priority Queue)======\n[[Soubor:pq.png]]\n# Více prioritních tříd – třídění závisí na přijaté politice\n# Každá třída má vlastní výstupní frontu\n# Riziko vyhladovění – dokud není prázdná prioritnější fronta, tak se neodbavují další\n# V praxi se prioritní fronty kombinují ještě s jinými frontami\n\n----\n\n======Cyklické fronty RR (Round Robin)======\n[[Soubor:rr.png]]\n# Každá fronta odpovídá jednomu toku (z celkem n)\n# Cyklická obsluha všech front\n# Rychlost obsluhy je R/n\n# V jednom cylku se z každé fronty odebere stejný počet paketů (bitů)\n# Pokud je fronta prázdná, pokračuje se obsluhou nejbližší neprázdné fronty\n\n\'\'\'Deficitní cyklické fronty\'\'\' – mají jakési počítadlo, které určuje, kolik by se mělo za dané kolečko odebrat – pokud je extra velký paket, může se čekat pár kol, než se odebere\n\n----\n\n======Váhové fronty WFQ (Weighted Fair Queue)======\n[[Soubor:wfq.png]]\n# Pro každý tok jedna fronta- dynamické vytváření a zánik\n# Váha určuje počet odebraných paketů fronty\n# Podobné jako round robin, ale je určená váha dat frokaždou frontu\n# Můžu jimi velmi přesně říct, jaké má být přenosové pásmo jakéhokoli provozu\n# Pokud mám provoz a chci dát např 50% na RTP, 20% na SIP a zbytek na webové služby, tak nastavím v tomto poměru váhy a přenosové pásmo se v tomhle poměru bude přidělovat\n# Dochází k přeskládání, ale na rozdíl od prioritních front nedochází k vyhladovění (a jistým způsobem je možné prioritu nastavit\n\n----\n\n====Mechanismus Leaky Bucket====\n# Máme nádobu ve které je díra. Nějakou rychlostí z kohoutku teče voda a nějako to zase dolu odtéká pryč. Pokud rychlost odtékání je menší než rychlost přitékání, tak semi to začne plnit. A až se mi to zaplní, začne přetékat přes okraj.\n\'\'\'U sítí:\'\'\'\n# Vnutí vstupnímu provozu, který je obvykle tvořen nepravidelnými shluky dat, stálý výstup\n# Do vědra (fronty) přichází neregulovaný datový tok\n# Pakety odcházejí dírou ve dně vědra a jsou přenáseny do sítě rychlostí r bytů za sekundu\n# Velikost vědra je omezena na b bytů\n# Pokud algoritmus má frontu (b > 0), jedná se o rozložení provozu (traffic shaping), při kterém může dojít ke zpoždění paketů přicházejících větší rychlostí než r\n# Jestliže je velikost fronty nulová, jedná se o ořezání provozu (traffic policing)\n\n\n\n====Mechanismus Token Bucket====\n# Po mnoho aplikací je vhodnější krátkodobě povolit překročení výstupní rychlosti tak, aby vstupní shluk dat mohl projít bez zahození\n# Máme vědro, které může uchovat až b žetonů (tokens). \n# Žetony se generují rychlostí r žetonů za sekundu a vkládají se do vědra\n# Žeton odpovídá povolení přeposlat jeden byte\n# Pokud obsahuje vědro méně než b žetonů, je do něj žeton vložen\n# V případě plného vědra je žeton zahozen\n# Maximální shluk dat, který může poslat naráz, má velikost b\n# Předtím, než může paket vstoupit do sítě, musí být prvně odstraněn jeden žeton z vědra\n# Pokud je vědro prázdné, musí paket počkat, než se žeton vygeneruje (Traffic shaping)\n# Traffic policing v tom případě, že není žádná fronta pr oukládání paketů\n\n\n\n\'\'\'Tři základní kritéria pro ořezání:\'\'\'\n\n\'\'\'Průměrná rychlost (average rate)\'\'\' – k omezení dlouhodobé přuměrné rychlosti\n\n\'\'\'Rychlost ve špičce (peak rate)\'\'\' – maximální počet paketů během kratší časové periody\n\n\'\'\'Velikost shluků (burst size)\'\'\' – limit maximálního počtu paketů, které jsou poslány do sítě během extrémně krátkého časového intervalu (omezení velikosti shluku paketů)\n\n----\n\n====Integrované služby====\n# Snaží se na vždy specifikovat zdroje, které daný provoz/tok konkrétně vyžaduje, udělat tam rezervaci přenosové kapacity, příp. kapacity pro zpracování. Pokud toto existuje, tak se vytvoří taková cesta pro ten tok a zajistí se tam požadovaná kvalita toho toku.\n# Pokud zařízení neumožňuje pokrýt všechny požadavky, které tam pomocí integrovaných služeb přijdou, tak to odmítne a máme možnost to buď poslat někam jinam, s jinou kvalitou, nebo vůbec. Tzn. zařízení mi řekne, že v této kvalitě ta data není schopné přenést\n# Dá se použít pro jednotlivé toky, ne páteřní směrovače, kde jsou jich tisíce\n\n\n\'\'\'Obsahují pouze malý počet tříd (tři základní), jemnější dělení neumožňuje:\'\'\'\n# \'\'\'garantované služby\'\'\' – říkají, jaké je maximální zpoždění, které můžeme na zařízení dosáhnout – striktní omezení zpoždění ve frontách\n# \'\'\'kontrolování zátěže\'\'\' – zajišťují, že provoz prochází v takové kvalitě, jako kdyby prvek nebyl zatížený\n# \'\'\'největší úsilí\'\'\' – bez toho aby se vytvářela rezervace – běžná kvalita nad IP\n\n=====Rezervační protokol RSVP=====\n# Aplikační protokol, kt. vytváří spojení od přijímače k vysílanému zdroji\n# Je to signalizační protokol pro rezervaci zdrojů na síťových prvcích\n# RSVP vyžaduje určitou režii- než dojde k přenosu se musí ustavit spojení a rezervace zdrojů\n# Rezervace pásma v multicastových stromech – provádí je pomocí jakýchsi proměnných jako rychlost přenosového pásma, velikost zásobníku tokenů\n# Pokud více stanic pošle žádost o rezervaci, může dojít k tomu, že se ty rezervace spojí do jedné a rezervuje se jeden kanál s danými vlastnostmi, ve kterém potečou data všech žadatelů/příjemců\n# Žádost o rezervaci provádí koncová stanice (receiver-oriented) – přijímač, ne zdroj vysílání\n# Rezervace zdrojů se používá jen v sítích pod jednou administrací (aby si nemohl kdokoliv cokoliv rezervovat)\n# Zařízení, které tvoří infrastrukturu sítě musí mít poporu RSVP (a až poté je možné vytvorit rezervované přenosové pásmo)\n# Rezervace se provádí pro tok\n# Výhoda: garantuje pro daný tok kvalitu, jakou jsme požadovali\n# Nevýhoda: režie a složitost (pokud by každý tok měl mít rezervaci pásma)\n\n----\n\n====Diferenciované služby====\n# Nepracují na základě toků, ale na základě paketů a hlavním cílem je diferenciovat pakety do určitých tříd a pro dané třídy se definují politiky\n# Pakety stejné třídy se posílají se stejnou prioritou\n# Máme koncová zařízení, která vysílají pakety, které chceme s určitou kvalitou služeb doručit. Pokud paket dorazí na vstupní směřovač dané sitě pod jednou správou (většinou providera), tak podle typu paketů dojde ke klasifikaci.\n# Paket je označen (u IP políčko ToS – type of service) a v rámci sítě toho providera jsou nadefinované politiky zpracování jedn. tříd na každém aktivním prvku \n# Flexibilní a rozšiřitelné (z pohledu definice tříd)\n# Umožňuje rychlé přeposílání, protože routery uvnitř sítě neprovádí žádnou klasifikaci, jen když přijde paket, podívají se na IP precedens a přepošlou ho do dané fronty\n# Dřív se ale zjistí, kam paket směruje, a až pak se to umístí do výstupní fronty (ta funguje podle politiky, kterou jsme definovali)\n# Z hlavičky se používá IP precedence, která definuje 3 bity v políčku ToS. Další 4 bity jsou podle definice nevyužité a pak je tam ještě rezervní bit\n# Později to nějaké RFC předefinovalo, a řeklo že to už nebude ToS, ale DS a prvních 6 bitů bude DSCP kód – ten říká, s s jakou precedensí se to posílá a s jakou pravděpodobností se to zahazuje, když dochází k zahlcení\n# Přijde paket, provede se klasifikace, pak se označí (přidělí se třída daného provozu v ToS nebo DSCP), pak se přepošle dál, a podle toho jk je označen a jak jsou zaplněné fronty se přepole dál nebo zahodí\n\n\n\'\'\'Třídy, jak s oklasifikovanými pakety zacházet:\'\'\'\n======Přednostní přeposílání EF (Expedited Forwarding)======\n# výstupní rychlost odeslání paketů dané třídy musí být stejná nebo vyšší než nakonfigurovaná rychlost\n# garantováno bez ohledu na intenzitu ostatního provozu\n======Garantované přeposílání AF (Assured Forwarding)======\n# rozděluje provoz do 4 tříd – AF1 až AF4\n# každé třídě je zaručena určitá přenosová rychlost\n# každá ze tříd definuje tři druhy zahazování paketů\n# pokud dojde k zahlcení linky, směrovač může zahodit pakety na základě preference zahazování\n[[Soubor:af.png]]\n# \'\'\'Low Drop Prec\'\'\' – pokud dojde k zahlcení, tento paket se bude zahazovat poslední z paketů stejné třídy\n# \'\'\'High Drop Prec\'\'\' – pokud dojde k zahlcení, zahoďte mě!\n[[Soubor:high_drop.png]]\n======Best Effort======\n# implicitní třída, která se použije pokud není hodnota DSCP namapovaná na nějakou politiku\n\n----\n\n====Prevence zahlcení RED a WRED====\n# Vychází z toho, že jednou se každá fronta zahltí\n# Když se fronta začne zaplňovat, panika, co budeme dělat?\n## můžeme čekat, až se zaplní, a pak všechno zahazovat\n## RED a WRED – pokud se fronta začne zaplňovat ale ještě nebude plná, začnu náhodně zahazovat některé pakety – fronta se hned nezahltí\n\n======RED======\n# Máme dva body, Qmin a Qmax – definice vstupní fronty\n# Do vstupní fronty přichází pakety. Pokud velikost fronty nedosáhla Qmin, pakety se zahazují s nulovou pravděpodobností\n# S narůstající frontou se mi zvyšuje pravděpodobnost zahazování\n# Jakmile se fronta zaplní úplně, všechny pakety se zahazují\n# Generují se náhodná čísla, pokud spadne do intervalu, paket se zahodí\n[[Soubor:red.png]]\n\n======WRED======\n# Váhový RED (Weighted RED)\n# Nezahazuje pakety jen na základě toho, kdy přišly, ale zajímá ho i precedens\n# Data s lepší prioritou se začnou zahazovat později\n[[Soubor:wred.png]]\n\n----\n\n==Směrovací algoritmy==\n====Link-state====\n# Link-state protokol sleduje stav a typ připojení každé linky\n# Zná topologii celé sítě – ví, která linka je up nebo down\n# Počítá „cenu“ za kterou se tam dostane\n# Vybere cestu, která prochází více uzly, ale má rychlejší médium, před přímější cestou s pomalým médiem\n# Větší hardwarové nároky (protože víme, jak celá síť vypadá)\n[[Soubor:Link_state.png]]\n\n\'\'\'Používá Dijkstrův algoritmus:\'\'\' \n# Funguje nad hranově kladně ohodnoceným algoritmem\n# Algoritmus si pro každý vrchol (uzel) pamatuje délku nejkratší cesty, jakou se k němu dá dostat\n# Začátek cesty je vždy aktuální směrovač\n# Iterativní výpočet\n\n======OSPF – Open Shortest Path First======\n# Provádí změny v routovacích tabulkách na základě změny stavu sítě\n# V pravidelných krátkých intervalech si routry speciálními zprávami kontrolují spojení se sousedními routery\n# Při zjištění jakékoli změny zasílá oznámení všem routerům v síti, ty si pak přepočítají cesty a upraví směrovací tabulky\n# O výměnu souhrnných informací mezi oblastmi se starají hraniční routery\n# \'\'\'Výhody:\'\'\'\n## velmi rychlá konvergence\n## možnost členit velké oblasti na menší zóny\n# \'\'\'Nevýhody:\'\'\'\n## paměťově a výpočetně náročné\n\n----\n\n====Distance-vector====\n# Získává informace od sousedícího routru\n# Protože je závislý na informacích od souseda, který je získal zas od dalšího soudeda, nazývá se to „routing by rumor“\n# Periodicky zasílá směrovací updaty všem svým sousedům broadcastováním jejich směrovacích tabulek \n# Počítá „cenu“ za kterou se tam dostane, obyčejně je to počet uzlů, které musí projít do cíle (například cíl A je 5 uzlů daleko)\n# Distance vector je lepší v případě, že všechny linky v síti mají stejnou rychlost\n[[Soubor:Distance_vector.png]]\n\n======RIP – Routing Information Protocol======\n# Patří mezi nejstarší směrovací protokoly\n# Používá Bellman-Fordův algoritmus (pomalší verze Dijkstrova, která může mít i záporně ohodnocené hrany)\n# Metrikou směrování je počet skoků k cilové síti (hop count)\n# Jako ochrana proti směrovacím smyčkám je implementovaný omezený počet směrovačů na cestě k cíli (max. 15)\n# To omezuje také velikost sítě, ve které je možné RIP použít\n# 16 hopů je nekonečná vzdálenost, označení nepřístupných, nepoužitelných směrovacích tras\n\n\'\'\'RIPv1\'\'\'\n# Nezná masku, proto musí být všechny podsítě stejně velké (se stejnou maskou)\n# Neexistuje autentizace\n\n\'\'\'RIPv2\'\'\'\n# Přidána autentizace, hesla ale ve formě nekódovaného textu\n# Možnost přenášet informace o masce sítě\n# Vysílá sousedům svou směrovací tabulku pomocí multicastu\n\n\'\'\'RIPng\'\'\'\n# Podpora IPv6\n\n----','utf-8'),(444,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude v pátek 1.3. u Kirke!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12)\n \n\'\'zbývá\'\': 1.3.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 30\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(445,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude v pátek 28.2. u Kirke!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12)\n \n\'\'zbývá\'\': 1.3.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 30\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(446,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve čtvrtek 28.2. u Kirke!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12)\n \n\'\'zbývá\'\': 1.3.(K,ASK), 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 30\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(447,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ==\n\n==== ZÁKLADNÍ KATEGORIE ====\n\n• GENERICKÝ SOFTWARE: Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• ZÁKAZNICKÝ SOFTWARE: Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\nVLASTNOSTI Z HLEDISKA POUŽITÍ\n\n• SPRÁVNOST: Míra, do jaké SW vyhovuje specifikaci.\n\n• SPOLEHLIVOST: Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• EFEKTIVNOST: Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• POUŽITELNOST: Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• BEZPEČNOST: Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• PŘENOSITELNOST: Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• ZNOVUPOUŽITELNOST: Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• INTEROPERABILITA: Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n==== VLASTNOSTI Z HLEDISKA ZMĚN ====\n\n• UDRŽOVATELNOST: Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• PRUŽNOST (MODIFIKOVATELNOST): Úsilí nutné pro modifikaci výrobku při provozu.\n\n• TESTOVATELNOST: Úsilí nutné pro testování vlastností SW.\n\n• DOKUMENTOVANOST: Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n== PROBLÉMY PŘI VÝVOJI SW ==\n\n• SLOŽITOST: Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• NEPŘIZPŮSOBIVOST: Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• NESTÁLOST: Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• NEVIDITELNOST: Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• SPECIFIKACE POŽADAVKŮ: Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• NÁCHYLNOST K CHYBÁM: Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• PRÁCE V TÝMU: Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• NÍZKÁ ZNOVUPOUŽITELNOST: Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• PROBLÉM MÍRY: Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• DOKUMENTACE: S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• OPOTŘEBOVÁNÍ: Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n==== PŘÍČINY SELHÁNÍ SW PROJEKTŮ ====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n==== KLÍČOVÉ FAKTORY ÚSPĚCHU ====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n== PROCES VÝVOJE ==\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• SW PROCES: Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• DEKOMPOZICE: Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n== ETAPY ==\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n==== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) ====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n==== ARCHITEKTONICKÝ NÁVRH (3.5%) ====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n==== PODROBNÝ NÁVRH (3.5%) ====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n==== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) ====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\nINTEGRACE A TESTOVÁNÍ SYSTÉMU (6%)\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n==== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (67%) ====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků. \n\n==== PROVOZ A ÚDRŽBA ====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n== MODELY ==\n\n==== VODOPÁDOVÝ MODEL ====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n==== ITERATIVNÍ MODEL ====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n==== INKREMENTÁLNÍ MODEL ====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n==== SPIRÁLOVÝ MODEL ====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• PROTOTYP: Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n==== RUP (RATIONAL UNIFIED PROCESS) ====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n==== AGILNÍ METODOLOGIE ====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(448,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ==\n\n----\n\n==== ZÁKLADNÍ KATEGORIE ====\n\n• GENERICKÝ SOFTWARE: Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• ZÁKAZNICKÝ SOFTWARE: Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n----\n\n==== VLASTNOSTI Z HLEDISKA POUŽITÍ ====\n\n• SPRÁVNOST: Míra, do jaké SW vyhovuje specifikaci.\n\n• SPOLEHLIVOST: Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• EFEKTIVNOST: Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• POUŽITELNOST: Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• BEZPEČNOST: Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• PŘENOSITELNOST: Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• ZNOVUPOUŽITELNOST: Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• INTEROPERABILITA: Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n----\n\n==== VLASTNOSTI Z HLEDISKA ZMĚN ====\n\n• UDRŽOVATELNOST: Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• PRUŽNOST (MODIFIKOVATELNOST): Úsilí nutné pro modifikaci výrobku při provozu.\n\n• TESTOVATELNOST: Úsilí nutné pro testování vlastností SW.\n\n• DOKUMENTOVANOST: Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n----\n\n== PROBLÉMY PŘI VÝVOJI SW ==\n\n• SLOŽITOST: Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• NEPŘIZPŮSOBIVOST: Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• NESTÁLOST: Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• NEVIDITELNOST: Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• SPECIFIKACE POŽADAVKŮ: Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• NÁCHYLNOST K CHYBÁM: Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• PRÁCE V TÝMU: Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• NÍZKÁ ZNOVUPOUŽITELNOST: Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• PROBLÉM MÍRY: Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• DOKUMENTACE: S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• OPOTŘEBOVÁNÍ: Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n----\n\n==== PŘÍČINY SELHÁNÍ SW PROJEKTŮ ====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n----\n\n==== KLÍČOVÉ FAKTORY ÚSPĚCHU ====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n----\n\n== PROCES VÝVOJE ==\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• SW PROCES: Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• DEKOMPOZICE: Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n----\n\n== ETAPY ==\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n==== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) ====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n==== ARCHITEKTONICKÝ NÁVRH (3.5%) ====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n==== PODROBNÝ NÁVRH (3.5%) ====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n==== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) ====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\nINTEGRACE A TESTOVÁNÍ SYSTÉMU (6%)\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n==== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (67%) ====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků. \n\n==== PROVOZ A ÚDRŽBA ====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n----\n\n== MODELY ==\n\n==== VODOPÁDOVÝ MODEL ====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n==== ITERATIVNÍ MODEL ====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n==== INKREMENTÁLNÍ MODEL ====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n==== SPIRÁLOVÝ MODEL ====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• PROTOTYP: Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n==== RUP (RATIONAL UNIFIED PROCESS) ====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n==== AGILNÍ METODOLOGIE ====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(449,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ==\n\n----\n\n==== ZÁKLADNÍ KATEGORIE ====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n==== VLASTNOSTI Z HLEDISKA POUŽITÍ ====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n==== VLASTNOSTI Z HLEDISKA ZMĚN ====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n== PROBLÉMY PŘI VÝVOJI SW ==\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n==== PŘÍČINY SELHÁNÍ SW PROJEKTŮ ====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n==== KLÍČOVÉ FAKTORY ÚSPĚCHU ====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n== PROCES VÝVOJE ==\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n== ETAPY ==\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n==== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) ====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n==== ARCHITEKTONICKÝ NÁVRH (3.5%) ====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n==== PODROBNÝ NÁVRH (3.5%) ====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n==== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) ====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\nINTEGRACE A TESTOVÁNÍ SYSTÉMU (6%)\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n\n==== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (67%) ====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků. \n\n\n==== PROVOZ A ÚDRŽBA ====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n== MODELY ==\n\n==== VODOPÁDOVÝ MODEL ====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n==== ITERATIVNÍ MODEL ====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n==== INKREMENTÁLNÍ MODEL ====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n==== SPIRÁLOVÝ MODEL ====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n==== RUP (RATIONAL UNIFIED PROCESS) ====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n==== AGILNÍ METODOLOGIE ====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(450,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ==\n\n----\n\n==== ZÁKLADNÍ KATEGORIE ====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n==== VLASTNOSTI Z HLEDISKA POUŽITÍ ====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n==== VLASTNOSTI Z HLEDISKA ZMĚN ====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n== PROBLÉMY PŘI VÝVOJI SW ==\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n==== PŘÍČINY SELHÁNÍ SW PROJEKTŮ ====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n==== KLÍČOVÉ FAKTORY ÚSPĚCHU ====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n== PROCES VÝVOJE ==\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n== ETAPY ==\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n==== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) ====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n==== ARCHITEKTONICKÝ NÁVRH (3.5%) ====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n==== PODROBNÝ NÁVRH (3.5%) ====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n==== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) ====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n==== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) ====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n==== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (67%) ====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků. \n\n\n==== PROVOZ A ÚDRŽBA ====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n== MODELY ==\n\n==== VODOPÁDOVÝ MODEL ====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n==== ITERATIVNÍ MODEL ====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n==== INKREMENTÁLNÍ MODEL ====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n==== SPIRÁLOVÝ MODEL ====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n==== RUP (RATIONAL UNIFIED PROCESS) ====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n==== AGILNÍ METODOLOGIE ====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(451,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n=== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ===\n\n----\n\n===== ZÁKLADNÍ KATEGORIE =====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA POUŽITÍ =====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n===== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (67%) =====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků. \n\n\n===== PROVOZ A ÚDRŽBA =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(452,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n=== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ===\n\n----\n\n===== ZÁKLADNÍ KATEGORIE =====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA POUŽITÍ =====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n\n===== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (67%) =====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků. \n\n\n===== PROVOZ A ÚDRŽBA =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(453,'','utf-8'),(454,'','utf-8'),(455,'','utf-8'),(456,'','utf-8'),(457,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40 (01, 02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(458,'==== Model ISO/OSI ====\n[[Soubor:ISO_OSI.png]]\n# \'\'\'Aplikační vrstva (Application)\'\'\' – uživatelské procesy a aplikace komunikující po síti (adresářové služby, elektronická pošta, přenos souborů)\n# \'\'\'Prezentační vrstva (Presentation)\'\'\'– zobrazení dat mezi různými aplikacemi a architekturami (ASCII, EBCDIC, binary...) kódování, komprese\n# \'\'\'Relační vrstva (Session)\'\'\'– udržování relací mezi komunikujícími aplikacemi\n# \'\'\'Transportní vrstva (Transport)\'\'\' – spolehlivý přenos mezi koncovými uzly\n# \'\'\'Síťová vrstva (Network)\'\'\' – adresování a směřování dat, směrovací protokoly\n# \'\'\'Linková vrstva(Datalink)\'\'\' – přenos dat po konkrétní lince a adresování na linkové vrstvě\n## popsáno standardy 802 (fyzická i linková vrstva) (Ethernet, Frame Relay, TokenRing...)\n# \'\'\'Fyzická vrstva (Physical)\'\'\'– fyzické vlastnosti linky (IEEE 802.3, TokenRing...)\n\n----\n\n==TCP/IP==\n====Požadavky====\n# Doručení dat bez ohledu na stav konkrétního uzlu či sítě\n# Přenos paketů z každého uzlu do každého uzlu za jakýchkoli okolností\n# Přenos po libovolném typu média (metalické spojení, mikrovlny, opt. vlákna, sat. spojení)\n\n====Referenční model====\n# Standard současného Internetu\n# Vytvořen na žádost DoD v USA (DARPA, 1969)\n# Decentralzovaný robustný systém, nezávislý na médiu\n# Snadno implementovatelný\n\n====Model====\n# Jednodušší než ISO/OSI\n# Spojuje aplikační, prezentační a relační vrstvu do jedné -> aplikační\n# Spojuje fyzickou a linkovou do jedné -> network interface -> implementováno na síťové kartě\n# Zapouzdření (Encapsulation) -> nižší vrstva obalí data z vyšší vrstvy\n\n====Protokolový profil====\n[[Soubor:prot_profil.png]]\n# \'\'\'ARP, RARP\'\'\' - mapování adres IP na MAC (překlad fyzických a IP adres)\n# \'\'\'ICMP\'\'\' – Internet Control Management Protocol – musí být součástí protokolu IP, správa a řízení IP -> když se paket zahodí nebo ztratí, ICMP o tom posílá zpráv\n# \'\'\'IGMP\'\'\' – Internet Group Management Protocol -> přihlašování multicastingových skupin\n\n----\n\n====Vrstvy====\n======Aplikační vrstva======\nTvořena procesy a aplikacemi, které komunikují po síti – i prezentace dat, kódování a řízení dialogu\n\n# Uživatelské protokoly – FTP, Telnet, SMTP, HTTP\n# Systémové protokoly – SNMP, RARP, DNS, NFS\n\n======Transportní vrstva======\ntvoří logické spojení mezi koncovými body (transport dat od zdrojového PC na cílový)\n\n# Aplikační data se rodělují na menší jednotky (pakety) a posílají se po síti\n# TCP a UDP datagram/paket\n# Komunikace pomocí schránek (socket)\n\n\'\'\'Činnosti:\'\'\'\n# Segmentace aplikačních dat\n# Posíláni dat z jednoho koncového zařízení na druhé\n# Ustavení spojení (jen TCP)\n# Řízení toku dat mechanismem sliding window (TCP)\n# Spolehlivý přenos dat (jen TCP)\n\n======Internetová vrstva======\nVytváří datagramy (pakety), adresuje je a směřuje na místo určení\n\n# Zajišťuje best-effort (největší usilí)\n# Hledá nejvhodnější cestu\n# Když se data ztratí, uživatel je informován (výpadek linky, přeplněné fronty na směřovačích), ale musí si zajistit přenos sám\n# IP protokol, ARP, RARP, ICMP, IGMP\n# IP datagram, ICMP datagram\n\n\'\'\'Operace IP vrstvy:\'\'\'\n\n# Datagramy a způsob adresování\n# Přenos dat mezi internetovou vrstvou a fyzickým rozhraním\n# Směřování datagramu na vzdálený počítač\n\n======Vrstva fyzického rozhraní======\n# Přístup na přenosové médium\n# Rutiny pro přístup k fyzickému médiu\n# Ethernet, TokenRing, FrameRelay\n\n----\n\n====Programování aplikací nad TCP/IP====\n# Programuje se na úrovni transportní vrstvy\n# Procesy aplikační vrstvy komunikují přes sockety\n# Schránky jsou identifikovány IP adresou a číslem portu\n# Pro komunikaci pomocí schránek se používají různé knihovny (např. BSD sockets)\n\n----\n\n====Adresování====\nAdresování je způsob identifikace adresáta pomocí jednoznačné informace\n======Fyzická vrstva======\n# 48-bitová fyzická adresa, např. 00:0c:6e:77:ce:22 – MAC adresa\n# Je tvořena šesti dvojicemi čísel v hexa soustavě, oddělenými dvoutečkou\n# Jednoznačne identifikuje síťové rozhraní počítače\n# Určena k daresování v lokální síti\n# Vypálena na síťové kartě, trvale v paměti ROM\n# Po inicializaci zkopírována do paměti RAM, některé OS ji mohou softwarově vyměnit\n# Prvních 24 bitů – registrace výrobce OUI (Organizational Unique Identifier)\n# Zbylých 24 bitů – číslo síťového rozhraní přiděleného výrobcem\n\n======IP vrstva======\n# 32-bitová IPv4 adresa nebo 128-bitová IPv6 adresa\n# Jednoznačně identifikuje PC v síti, strojové zpracování\n\n======Transportní vrstva======\n# Adresování služeb (např e-mail, DNS...)\n# Jednoznačně identifikuje službu v daném počítači\n# TCP a UDP protokol – 16ti bitová čísla portu\n# Porty:\n## rezervované (0 - 1023) --> přiděluje je organizace IANA\n## registrované (1024 – 49151) --> nejsou přidělovány IANA, ale ta je registruje a zobrazuje ve výpisu\n## dynamické (49452 – 65535) --> volně využívatelné\n\n======Aplikační vrstva======\nAdresování závislé na konkrétní aplikaci\n\n# email --> user@host\n# www --> url\n\n----\n\n==IP adresy==\n# IP adresy jsou centrálně spravovány organizací IANA\n# IP adresy rozdělují regionální registrátoři (RIR), rozděleni do několika regionů, Evropa má RIPE NCC\n# IP adresy mohou být:\n## statické – přiděleny napevno\n## dynamické – přiděleny jen po dobu komunikace\n### Pro dynamické přidělování IPv4 adres se používá systém DHCP\n\n======IPv4======\n# Čtvrtá verze protkolu IP, ale první, která se masivně rozšířila\n# IPv4 adresa sestává z 32 bitů, které jsou zapsáne dekadicky po jednotlivých bajtech oddělených tečkou\n# 3. února 2011 byli rozděleny poslední bloky adres IPv4, čímž došlo k jejich vyčerpání\n======DHCP======\n# DHCP Discover – počítač přijde so sítě a nemá IP adresu. Tak zařve na broadcast (port 67), zda tan není DHCP server\n# DHCP Offer – odpověd DHCP serveru, nabídne IP adresu\n# DHCP ACK – potvrzuje přijetí volby a přidělení IP adresy na určitou dobu (lease)\n# DHCP Release – uvolnění IP adresy\n\n====Schémata IP adresování====\n# Rozdělení IP adres do tříd\n# Vytváření podsítí (subnetting)\n# Beztřídní adresování (pomocí masky, bez tříd)\n# Překlad adres NAT\n# Adresování IPv6\n\n----\n\n=====Rozdělení IP adres do tříd=====\n[[Soubor:tridni_adr.png]]\n# Prefix sítě označuje počet jedičkových bitů v masce sítě\n# Nejnižší adresa v síti slouží pro označení celé sítě\n# Nejvyšší adresa v síti slouží pro broadcast\n# Adresa 127.0.0.0 je určena pro loopback (localhost), logická smyčka umožňující posílat pakety sám sobě\n# Interní IP adresy:\n## slouží pro adresování vnitřních sítí, na internetu se nikdy nemohou objevit\n## ve třídě A: 10.0.0.0 – 10.255.255.255\n## ve třídě B: 172.16.0.0 – 172.31.255.255\n## ve třídě C: 192.168.0.0 – 192.168.255.255\n\n\n# I když jsou ve třídním adresování prefixy dlouhé 8,16 a 24 bitů počet sítí je pouze 2^7 – 2, 2^14 – 2 a 2^21 – 2. Zdánlivě se nám ztratily 1, 2 a 3 bity v adresách typu A, B a C. Jenže tyhle bity jsou již vyhrazeny jakožto “určující začátek”, jinými slovy, určují rozsah konkrétní třídy. Ve třídě A je vyhrazen první bit, který je nulový, tudíž rozsah může být jen 0 – 127. V adrese B se jedná již o dva bity a adrese typu C až tři.\n\n----\n\n=====Vytváření podsítí (subnetting)=====\n# Cílem efektivní využití adresového prostoru\n# Na rozdíl od předchozího schématu, kdy maska sítě závisí na třídě adresy, je možné rozdělit část adresy určenou pro počítače ještě na adresu podsítě a adresu počítače libovolně podle aktuálních potrěb\n[[Soubor:Subnetting.png]]\n\n\'\'\'Výhody:\'\'\'\n\n# logické či geografické dělení sítí (např. jednotlivá oddělení firmy mají vlastní podsíť)\n# snížení zátěže na síti – omezení vysílání typu broadcast (např. ARP dotazy)\n# bezpečnost při oddělení podsítí\n# jednodušší administrace\n[[Soubor:Podsite.png]]\n# V tomto případě pořebujeme 3 podsítě, tudíž nám pro SubnetID stačí dva bity (možné 4 podsítě)\n\n----\n\n=====Beztřídní adresování=====\n\n# Snaha o efektivní využití adresového prostoru\n# Síťová část IP adresy může mít libovolný počet bitů\n# Formát beztřídní adresy je w.x.y.z/n, kde n udává počet bitů síťové části IP adresy\n# Pokud firma požaduje blok adres pro 1000 počítačů, bude mít adresu w.x.y.z/22. Posledními 10ti bity totiž můžeme adresovat 1024 počítačů, čímž se efektivně využije adresový prostor\n# V případě tŕídního adresování by organizace dostala adresu typu B, kde je možné mít přes 65 tis. adres, což je příliš\n\n\'\'\'Prefix\'\'\' – číslo, které udává počet bitů síťové části IP adresy\n\'\'\'Maska\'\'\' – odvozuje se z prefixu. Má formát IP adresy, její konktrétní hodnotou jsou všechny jedničkové bity prefixu a zbytek nulový.\n\'\'\'Příklad:\'\'\'\n\n Prefix - /8 --> bitový zápis prefixu - 11111111 00000000 00000000 00000000 --> maska: 255.0.0.0\n Prefix - /11 --> bitový zápis prefixu - 11111111 11100000 00000000 00000000 –-> maska: 255.224.0.0\n\n======Výpočet počtů sítí a počítačů v síti======\n\'\'\'Počet sítí:\'\'\' 2^(počet bitů prefixu) – 2\n# V třídním adresování se na základě třídy 1-3 bity z prefixu odeberou\n\n\'\'\'Počet stanic:\'\'\' 2^(počet zbývajících bitů) – 2\n# 2 se odečítá proto, že nejvyšší adresa v síti slouží pro broadcast a nejnižší pro označení celé sítě\n\n----\n\n=====Překlad adres (NAT)=====\n\n# Způsob mapování a překladu IP adres z jedné skupiny IP adres na druhou\n# Překlad adres může být: 1:1, M:N, N:1 (PAT)\n## M:N - M adres vnitřní sítě se mapuje na N adres vnější sítě, obvykle M <= N\n\n\'\'\'Výhody:\'\'\'\n\n# Šetření IP adres (Mnoho spojení v rámci organizace požaduje pouze interní komunikaci. Pouze malá část počítačů se v určitý okamžik připojí na internet)\n# Redukuje útoky typu „spoofing“, kdy se útočníkův počítač tváří jako lokální. (Nat používá pro vnitřní systém privátní IP adresy, které se nepoužívají v Internetu. Pokud se tam vyskytnou, směřovač je zahodí)\n# Odstraňuje potřebu změnit IP adresy počítačů, když dojde ke změně ISP\n\n\'\'\'Nevýhody:\'\'\'\n\n# NAT vyžaduje nároky na hardware či software při překladu adres a udržování překladové tabulky\n# Stanice, které jsou umístěny ve vnitřní síti, nelze v případě PAT adresovat\n# PAT používá čísla portů pro adresování počítačů, nikoli procesů, což je původní význam čísel portů\n# NAT omezuje použití kryptování a autentizace. Autentizace, která zaočítává původní IP hlavičku do kontrolního součtu, nebude pracovat korektně s prekladem PAT\n# Neustálé používání NAT brzdí rozšiřování protokolu IPv6\n\n----\n\n=====IPv6=====\n\n# IPv6 adresa má 128 bitů\n# Preferovný zápis je ve formátu X:X:X:X:X:X:X:X, kde X je hexadecimální zápis 16ti-bitového čísla (dohromady 8 čísel)\n# Zápis adresy lze skrátit použitím následujících pravidel:\n## Nuly na začátku každého 16ti bitového čísla lze vynechat\n## Blok samých nul lze nahradit jedinou nulou\n## Libovolný počet nulových bloků lze nejvýše jednou nahradit znakem „::“\n# Alternativní zápis IPv6 adresy může mít tvar X:X:X:X:X:X:D.D.D.D, kde pro X platí stejná pravidla jaké předtím a D je desítkový zápis 8mi bitového čísla (shodné s formátem IPv4)\n\'\'\'Příklady platných IPv6 adres:\'\'\'\n 1080:0000:0000:0000:0008:0800:200C:417A\n 1080:0:0:0:8:800:200C:417A\n 1080::8:800:200C:417A\n 1080::8:800:32.12.65.122\n\'\'\'Rozdělení adres:\'\'\'\n# IPv6 ruší broadcast adresy a k existujícím unicast a multicast zavádí nový typ anycast\n# Anycast se chová stejně jako unicast, s tím, že může být přiřazená více uzlům. Klient pak komunikuje s tím uzlem, který odpověděl jako první\n# Další možnost je rodělit adresy podle rozsahu:\n## Adresy na lince (neprojdou za router)\n## Lokální adresy (ULA, nejsou směřovatelné ve veřejné síti)\n## Veřejné adresy\n[[Soubor:IPv6.png]]\n# Linkové adresy – nesmějí se směřovat a nelze je proto použít pro komunikaci v rozlehlejší síti. Obvykle se tato adresa generuje automaticky a používá se pro další komunikaci mezi nižšími službami\n# Lokální adresy (ULA)– Síťová část ULA adresy sestává z těchto částí:\n## Prefix – FC00::/7\n## L bit- 1 pokud byl prefix přiřazen lokálně, 0 zatím nebyla definována\n## Global ID – identifikátor sítě, měl by být unikátní\n## Subnet ID – identifikátor podsítě. ULA adresy umožňují až 65 536 podsítí\n## Interface ID – identifikátor rozhraní. Je několik variant jak ho získat\n\n----\n\n==UDP==\n# User Datagram Protocol\n# Jednoduchý protokol transportní vrstvy orientovaný na zprávy\n# Neposkytuje žádné záruky doručení a odesilatelova UDP vrstva si u jednou už odeslaných zpráv neudržuje žádný stav\n# Postrádá mechanismus předcházení a regulace zahlcení sítě, je nutné nadbytečné UDP datagramy na routerech zahazovat\n# Důraz na rychlost doručení -> vhodné např. u VoIP a multimédií\n# Nevytváří spojení (data se odesílají na server pomocí sendto() a přijímají pomocí recvfrom())\n# Je používán DNS, DHCP, SNMP\n\n==TCP==\n# Transmission Control Protocol\n# Vytváří spojení -> point-to-point (jeden odesílatel, jeden příjemce)\n# Spolehlivé doručování, ve správném pořadí\n# \'\'\'Three Way Handshake:\'\'\'\n## klient -> server – datagram s příznakem SYN číslem sekvence x, potvrzovací číslo 0\n## server -> klient – datagram s příznakem SYN a ACK, číslo sekvence y, potvrzovací x+1\n## klient -> server – datagram s příznakem ACK, císlo sekvence x+1, potvrzovací y+1\n[[Soubor:3way_handshake.png]]\n# \'\'\'Ukončení spojení\'\'\':\n## klient -> server – datagram s příznakem FIN\n## server -> klient – odpoví datagramem s příznakem ACK\n## server -> klient – odešle datagram s příznakem FIN\n## klient -> server – odpoví s nastaveným příznakem ACK\n[[Soubor:TCP_end.png]]\n\n----\n\n==Model klient-server==\n# Standardní schéma komunikace mezi dvěma procesy\n\'\'\'Klient:\'\'\'\n# klient iniciuje spojení\n# klient zprávu přeloží do protokolu a odešle (nic nezpracovává, jen konvertuje do jiné syntaxe)\n# proměnná adresa\n# klienti nekomunikují mezi sebou\n\n\'\'\'Server:\'\'\'\n# čeká na požadavky, zpracuje je a odešle odpověď\n# pevná adresa\n# existují farmy serverů\n\n\'\'\'Protokol:\'\'\' soubor syntaktických a sémantických pravidel určujících výměnu informace nejméně mezi 2 entitami.\n# zahrnuje navázání spojení, adresování, přenos dat, zpracování chyb, řízení toku, přidělování prostředků\n\n\n----\n\n====Konkurentní TCP server:====\n\n# Vytvořit scránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem - bind()\n# Přepni scránku do pasivního čekání – listen()\n# Přijmi nový požadavek a vytvoř spojení – accept()\n# Pro nové spojení vytvoř nový proces – fork()\n# Vyměňuj si zprávy s klientem – read(), write()\n# Uzavři schránku a ukonči proces – close(), exit()\n\n====Iterativní TCP server:====\n\n# To samé bez fork()\n\n\n====Iterativní UDP server:====\n\n# Server čeká na požadavek\n# Načte požadavek, zpracuje, odešle odpověď a čeká na další\n# Většina UDP serverů je iterativních\n\n====Konkurentní UDP server:====\n\n# Vytvoř schránku – socket()\n# Otevři scránku a spoj ji s požadovaným portem – bind()\n# Vyčkej na požadavek klienta – recvfrom()\n# Přijmi požadavek, vytvoř nový proces – fork()\n# V novém procesu odešli odpověď – sendto()\n# Ukonči proces potomka – exit()\n\n----\n\n====Programové prostředky pro komunikaci mezi procesy:====\n\n# Unixové roury (pipes)\n# UUCP komunikace (unix to unix copy) – z hlediska bezpečnosti se dnes moc nepoužívá\n# Volání vzdálených procedur RPC\n# BSD scránky (sockets)\n\n\n=====BSD schránky=====\n\n# Aplikační (programové) rozhraní pro komunikující procesy\n# Abstraktní datová struktura obsahující údaje pro komunikaci\n# Pracují na transportní úrovni (TCP, UDP)\n# Určeny pro vytváření uživatelských aplikací\n# Nezasahují do nižších vrstev\n\n\n======Schránky typu „raw“======\n\n# Komunikace s nízkoúrovňovými protokoly\n# Používají se při čtení komunikace IP, ICMP, IGMP\n# Uživatel musí znát podrobně strukturu IP, příp. ICMP\n# Pouze správce systému (root) má právo vytvořit schránku typu „raw“\n\n\n=====RPC – Remote Procedure Call=====\n\n# Pracuje nad transportí vrstvou, tzn. na relační vrstvě v modelu ISO/OSI a aplikační v modelu TCP/IP\n# Slouží k programování komunikace po síti (aplikace typu klient-server)\n# K adresování používá speciální číslo programu, v kt. je procedura implementovaná a má se spouštět, navíc se přidává verze\n[[Soubor:RPC.png]]\n\n\'\'\'Činnost RPC:\'\'\'\n\n1. Klient volá vzdálenou proceduru. Client stub zjistí vzdálený port\n\n2. Client stub zabalí parametry zo zprávy RPC a pošle\n\n3. Zpráva je přenesena pomocí zprávy RPC nad UDP po síti\n\n4. Knihovna RPC předá volání funkci server stub. Ta zavolá proceduru\n\n5. Výsledek pošle server stub zpět\n\n6. Client stub přijme odpověď, dekóduje výsledek a předá ho aplikaci','utf-8'),(459,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 31, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 01\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 30, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(460,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 01, 31\n\n\'\'\'Hotovo\'\'\': 11, 12, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(461,'','utf-8'),(462,'','utf-8'),(463,'','utf-8'),(464,'','utf-8'),(465,'','utf-8'),(466,'','utf-8'),(467,'','utf-8'),(468,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Dioda==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n----','utf-8'),(469,'','utf-8'),(470,'','utf-8'),(471,'','utf-8'),(472,'','utf-8'),(473,'','utf-8'),(474,'','utf-8'),(475,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Dioda==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n----','utf-8'),(476,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Dioda==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n----','utf-8'),(477,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Dioda==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n----','utf-8'),(478,'','utf-8'),(479,'','utf-8'),(480,'','utf-8'),(481,'','utf-8'),(482,'','utf-8'),(483,'','utf-8'),(484,'','utf-8'),(485,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Diody==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n\n----\n\n==Tranzistory==\n===Bipolární tranzistory===\n[[Soubor:Bipolarnitranzistory.jpg]]\n\n\n\'\'\'Tranzistor má tři vývody:\'\'\'\n# \'\'\'Báze\'\'\' – ovládá tranzistor, na základě proudu v bázi je tranzistor sepnutý nebo vypnutý\n# \'\'\'Emitor\'\'\' \n# \'\'\'Kolektor\'\'\'\n\n# Na NPN musí být emitor záporný a na PNP musí být kladný, jinak to nebude fungovat\n# Na NPN musí být báze kladnější vůči emitoru (u PNP naopak)\n\n\n=====Parametry=====\n#\'\'\'Uce\'\'\' – napětí, které vydrží v zavřeném stavu (aby se nepoškodily P-N přechody)\n#\'\'\'Ube\'\'\' – bázové napětí v závěrném směru (kolem 5V) (závěrný směr je u NPN když je báze zápornější než emitor)\n#\'\'\'Ic – kolektorový proud\'\'\' (pokud se překročí, začne se zahřívat, může se poškodit)\n#\'\'\'Maximální bázový proud\'\'\'\n#\'\'\'Teplota přechodu\'\'\'\n#\'\'\'Proudový zesilovací činitel\'\'\' – kolikrát je větší kolektorový proud proti bázovému (kolektorový a bázový se násobí, takže pokud na bázi přivedeme méně proudu, úměrně se zmenší i proud na kolektoru\n#\'\'\'Saturační napětí kolektor-emitor (Uces)\'\'\' – jaké napětí nám zůtane na zavřeném tranzistoru (nežádoucí efekt, díky kterému se tranzistor zahřívá – vetšinou kolem 0.3V) – podobné ztrátě na diodě\n#\'\'\'Zbytkový proud\'\'\' – proud v závěrném směru – zanedbatelný\n#\'\'\'Ztrátový výkon\'\'\' – to co zůstane na tranzistoru a zahřívá ho\n## Pokud je tranzistor zavřený, je na něm velké napětí a zbytkový proud – minimální výkon\n## Pokud je tranzistor otevřený, tak je na něm malé napětí (závislé od saturačního napětí), ale velký proud\n\n\n#Na bázi se musí přivézt 0.6-0.7V aby se otevřel P-N přechod (to samé jako na diodě, je to omezeno materiálem)\n\n\n----\n\n=====Lineární mód=====\n# Kolektorový proud je závislý na bázovém (dáme míň proudu, míň se otevře, míň poteče)\n# Může být otevřený napůl – půl napětí x půl proudu zůstane na tranzistoru a moc ho zahřívá\n# Používá se například na zesilovače\n\n\n----\n\n=====Spínací mód=====\n# Může být jen otevřebý nebo zavřený (ne napůl)\n# Pokud chceme využívat vyhody spínacího i lineárního módu (bez mezistupňů se to nezahřívá a můžeme regulovat výstup), řeší se to pulsně-šířkovou modulací \n## Pokud máme na vstupu 10V a chceme 5V, tak bude půlku času zapnutý a půlku vypnutý (pulzy stejně dlouhé). Střední hodnota je tím pádem 5V, a tu druhou polovinu, která by v lineárním módu zůstala na tranzistoru neodebíráme, neplatíme, a nehřeje nám tranzistor\n# Ani ve spínacím módu se to nesepne hned a není to kolmé -> spínací ztráty\n# To, co zůstane na tranzistoru -> vodivé ztráty\n# Pokud se spíná moc rychle, generuje vysoké harmonické (mnohonásobek základní frekvence) – má tendenci se přenášet vzduchem, může rušit nebo ovlyvňovat činnost jiných obvodů\n# \'\'\'Parametr:\'\'\' čas, za který se dokáže tranzistor otevřít a zavřít (hodnoty nebývají stejné)\n\n\n----\n\n=====Komplementární tranzistory=====\n# tranzistory stejných parametrů, které jsou spolu zapojené, ale jeden je NPN a druhý PNP. Tyhle tranzisoty se párovaly – byli vybírané tranzistory se stejným zesilovacím činitelem (spolu se prodávali)\n\n\n----\n\n===Unipolární tranzistory===\n# Je jedno, kde se zapojí kolektor a emitor (nebo kde je + a -)\n# Společný název je FET – Field Emitted Transistor\n# \'\'\'Báze = gate\'\'\', hradlo\n# \'\'\'Emitor = source\'\'\', zdrojová elektroda\n# \'\'\'Kolektor = drain\'\'\', sběrná elektroda\n\n\n----\n\n=====JFET=====\n# Junction FET \n# P-N přechod jen mezi bází a emitorem\n[[Soubor:Jfet.gif]]\n\n----\n\n=====MOSFET=====\n# Metal Oxide Semiconductor\n[[Soubor:Mosfet.jpg]]\n# Ve skutečnosti vývody bývají jen tři, Body je obvykle spojené se source\n# Nemá P-N přechod – hradlo je pomocí oxidu izolované od zbytku\n# Nazývá se i polem řízené, protože je otevírá elektricé pole mezi hradlem a emitorem\n# Čím je teplejší, tím má větší odpor – bezproblémové paralelní řazení\n# Proud do báze se neuvažuje – téměř žádný (MOSFETy se budí jen napětím) – potřebujeme nabít vstupní kapacitu tranzistoru, ale poté nepotřebujeme téměř žádný proud\n# MOSFETy se používají hlavně ve spínacích aplikacích – ovšem aby začal něco dělat,musí se na něj přivést větší napětínež na bipoláry -> 0.8-4V\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi kolektorem a emitorem\n# Maximální proud mezi kolektorem a emitorem\n# Maximální napětí báze vůči emitoru – max 20V (někdy i 30, ale zřídka) – velice citlivé na statickou elektřinu – pokud se napětí překročí, oxid se prorazí a vodivě se to spojí\n# Odpor v sepnutém stavu (když je vypnutý, je nekonečný)\n# \'\'\'Strmost\'\'\' – podobné jako proudový zesilovací činitel – závislost kolektorového prouduna napětí hradla\n\n\n\'\'\'P-kanál\'\'\' – budí se záporným napětím hradla vůči emitoru (analog PNP)\n\n\n\'\'\'N-kanál\'\'\' – budí se kladným napětím hradla vůči emitoru (analog NPN)\n[[Soubor:Znacky.gif]]\n\n\n----\n\n===Tyristory===\n\n\n[[Soubor:Thyristor.gif]]\n# Spínací prvek – nepracuje nikdy v lineárním režimu\n# Po sepnutí ostává tyristor trvale sepnutí, i kduž už nemá buzení do Gate, a vypne se jen pokud anodový proud klesne pod nějakou úroveň (přídržný proud tyristoru) \n# V obvodech se střídavým proudem se tyristor přirozene vypne při přechodu proudu nulou\n# Bipolární prvek, proud teče jen jedním směrem\n# Existuje jestě součástka triak, která je použitelná i ve střídavých obvodech (proud může téct oběmi směry)\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi anodou a katodou\n# Maximální anodový proud\n# Teplota přechodu\n# Gateový proud, kterým se zajistí spolehlivé sepnutí\n# Spínací časy\n\n\n----\n\n==NAND a NOR v technologii CMOS==\n\'\'\'Parametry:\'\'\'\n# Rychlost hradla (za jak dlouho od vstupu dostanu výstup)\n\n\n# Hlavní spotřeba energie je při přepínání výstupu, proto se vývoj ubírá k co nejnižšímu napájecímu napětí (procesory u PC pracují s napětím 1-1.5V)\n\n===NAND===\n[[Soubor:Cmos_nand.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# CMOS může fungovat až na 15V – logická 0 je pořád 0-1V, logická 1 je napájecí napětí-(napájecí napětí-1V)\n# T1 a T2 tvoří logická 1 (kterýkoli z nich, stačí 1)\n# T3 a T4 jsu zapojeny sériově, tvoří logickou 0, ale musí být sepnuty oba (protože jsou zapojeny sériově, tak pokud je jeden vypnutý, obvod je už rozpojený)\n\n\n----\n\n===NOR===\n[[Soubor:Cmos_nor.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# T1 a T2 jsou zde zapojeny sériově, tvoří logickou 1, musí být sepnuty oba\n# T3 nebo T4 vytvoí logickou 0 pokud je aspoň jeden z nich sepnutý','utf-8'),(486,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Diody==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n\n----\n\n==Tranzistory==\n===Bipolární tranzistory===\n[[Soubor:Bipolarnitranzistory.jpg]]\n\n\n\'\'\'Tranzistor má tři vývody:\'\'\'\n# \'\'\'Báze\'\'\' – ovládá tranzistor, na základě proudu v bázi je tranzistor sepnutý nebo vypnutý\n# \'\'\'Emitor\'\'\' \n# \'\'\'Kolektor\'\'\'\n\n# Na NPN musí být emitor záporný a na PNP musí být kladný, jinak to nebude fungovat\n# Na NPN musí být báze kladnější vůči emitoru (u PNP naopak)\n\n\n=====Parametry=====\n#\'\'\'Uce\'\'\' – napětí, které vydrží v zavřeném stavu (aby se nepoškodily P-N přechody)\n#\'\'\'Ube\'\'\' – bázové napětí v závěrném směru (kolem 5V) (závěrný směr je u NPN když je báze zápornější než emitor)\n#\'\'\'Ic – kolektorový proud\'\'\' (pokud se překročí, začne se zahřívat, může se poškodit)\n#\'\'\'Maximální bázový proud\'\'\'\n#\'\'\'Teplota přechodu\'\'\'\n#\'\'\'Proudový zesilovací činitel\'\'\' – kolikrát je větší kolektorový proud proti bázovému (kolektorový a bázový se násobí, takže pokud na bázi přivedeme méně proudu, úměrně se zmenší i proud na kolektoru\n#\'\'\'Saturační napětí kolektor-emitor (Uces)\'\'\' – jaké napětí nám zůtane na zavřeném tranzistoru (nežádoucí efekt, díky kterému se tranzistor zahřívá – vetšinou kolem 0.3V) – podobné ztrátě na diodě\n#\'\'\'Zbytkový proud\'\'\' – proud v závěrném směru – zanedbatelný\n#\'\'\'Ztrátový výkon\'\'\' – to co zůstane na tranzistoru a zahřívá ho\n## Pokud je tranzistor zavřený, je na něm velké napětí a zbytkový proud – minimální výkon\n## Pokud je tranzistor otevřený, tak je na něm malé napětí (závislé od saturačního napětí), ale velký proud\n\n\n#Na bázi se musí přivézt 0.6-0.7V aby se otevřel P-N přechod (to samé jako na diodě, je to omezeno materiálem)\n\n\n----\n\n=====Lineární mód=====\n# Kolektorový proud je závislý na bázovém (dáme míň proudu, míň se otevře, míň poteče)\n# Může být otevřený napůl – půl napětí x půl proudu zůstane na tranzistoru a moc ho zahřívá\n# Používá se například na zesilovače\n\n\n----\n\n=====Spínací mód=====\n# Může být jen otevřebý nebo zavřený (ne napůl)\n# Pokud chceme využívat vyhody spínacího i lineárního módu (bez mezistupňů se to nezahřívá a můžeme regulovat výstup), řeší se to pulsně-šířkovou modulací \n## Pokud máme na vstupu 10V a chceme 5V, tak bude půlku času zapnutý a půlku vypnutý (pulzy stejně dlouhé). Střední hodnota je tím pádem 5V, a tu druhou polovinu, která by v lineárním módu zůstala na tranzistoru neodebíráme, neplatíme, a nehřeje nám tranzistor\n# Ani ve spínacím módu se to nesepne hned a není to kolmé -> spínací ztráty\n# To, co zůstane na tranzistoru -> vodivé ztráty\n# Pokud se spíná moc rychle, generuje vysoké harmonické (mnohonásobek základní frekvence) – má tendenci se přenášet vzduchem, může rušit nebo ovlyvňovat činnost jiných obvodů\n# \'\'\'Parametr:\'\'\' čas, za který se dokáže tranzistor otevřít a zavřít (hodnoty nebývají stejné)\n\n\n----\n\n=====Komplementární tranzistory=====\n# tranzistory stejných parametrů, které jsou spolu zapojené, ale jeden je NPN a druhý PNP. Tyhle tranzisoty se párovaly – byli vybírané tranzistory se stejným zesilovacím činitelem (spolu se prodávali)\n\n\n----\n\n===Unipolární tranzistory===\n# Je jedno, kde se zapojí kolektor a emitor (nebo kde je + a -)\n# Společný název je FET – Field Emitted Transistor\n# \'\'\'Báze = gate\'\'\', hradlo\n# \'\'\'Emitor = source\'\'\', zdrojová elektroda\n# \'\'\'Kolektor = drain\'\'\', sběrná elektroda\n\n\n----\n\n=====JFET=====\n# Junction FET \n# P-N přechod jen mezi bází a emitorem\n[[Soubor:Jfet.gif]]\n\n----\n\n=====MOSFET=====\n# Metal Oxide Semiconductor\n[[Soubor:Mosfet.jpg]]\n# Ve skutečnosti vývody bývají jen tři, Body je obvykle spojené se source\n# Nemá P-N přechod – hradlo je pomocí oxidu izolované od zbytku\n# Nazývá se i polem řízené, protože je otevírá elektricé pole mezi hradlem a emitorem\n# Čím je teplejší, tím má větší odpor – bezproblémové paralelní řazení\n# Proud do báze se neuvažuje – téměř žádný (MOSFETy se budí jen napětím) – potřebujeme nabít vstupní kapacitu tranzistoru, ale poté nepotřebujeme téměř žádný proud\n# MOSFETy se používají hlavně ve spínacích aplikacích – ovšem aby začal něco dělat,musí se na něj přivést větší napětínež na bipoláry -> 0.8-4V\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi kolektorem a emitorem\n# Maximální proud mezi kolektorem a emitorem\n# Maximální napětí báze vůči emitoru – max 20V (někdy i 30, ale zřídka) – velice citlivé na statickou elektřinu – pokud se napětí překročí, oxid se prorazí a vodivě se to spojí\n# Odpor v sepnutém stavu (když je vypnutý, je nekonečný)\n# \'\'\'Strmost\'\'\' – podobné jako proudový zesilovací činitel – závislost kolektorového proudu na napětí hradla\n\n\n\'\'\'P-kanál\'\'\' – budí se záporným napětím hradla vůči emitoru (analog PNP)\n\n\'\'\'N-kanál\'\'\' – budí se kladným napětím hradla vůči emitoru (analog NPN)\n[[Soubor:Znacky.gif]]\n\n\n----\n\n===Tyristory===\n\n\n[[Soubor:Thyristor.gif]]\n# Spínací prvek – nepracuje nikdy v lineárním režimu\n# Po sepnutí ostává tyristor trvale sepnutí, i kduž už nemá buzení do Gate, a vypne se jen pokud anodový proud klesne pod nějakou úroveň (přídržný proud tyristoru) \n# V obvodech se střídavým proudem se tyristor přirozene vypne při přechodu proudu nulou\n# Bipolární prvek, proud teče jen jedním směrem\n# Existuje jestě součástka triak, která je použitelná i ve střídavých obvodech (proud může téct oběmi směry)\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi anodou a katodou\n# Maximální anodový proud\n# Teplota přechodu\n# Gateový proud, kterým se zajistí spolehlivé sepnutí\n# Spínací časy\n\n\n----\n\n==NAND a NOR v technologii CMOS==\n\'\'\'Parametry:\'\'\'\n# Rychlost hradla (za jak dlouho od vstupu dostanu výstup)\n\n\n# Hlavní spotřeba energie je při přepínání výstupu, proto se vývoj ubírá k co nejnižšímu napájecímu napětí (procesory u PC pracují s napětím 1-1.5V)\n\n===NAND===\n[[Soubor:Cmos_nand.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# CMOS může fungovat až na 15V – logická 0 je pořád 0-1V, logická 1 je napájecí napětí-(napájecí napětí-1V)\n# T1 a T2 tvoří logická 1 (kterýkoli z nich, stačí 1)\n# T3 a T4 jsu zapojeny sériově, tvoří logickou 0, ale musí být sepnuty oba (protože jsou zapojeny sériově, tak pokud je jeden vypnutý, obvod je už rozpojený)\n\n\n----\n\n===NOR===\n[[Soubor:Cmos_nor.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# T1 a T2 jsou zde zapojeny sériově, tvoří logickou 1, musí být sepnuty oba\n# T3 nebo T4 vytvoí logickou 0 pokud je aspoň jeden z nich sepnutý','utf-8'),(487,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 31\n\n\'\'\'Hotovo\'\'\': 01, 11, 12, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(488,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n\nOd stroje k člověku\n\nObraz, Hmat, Zvuk, Čich\n\nOd člověku ke stroji\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních za�řízení s p�římým vlivem na komunikaci pat�í\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací za�řízení - pro vstup sou�řadnic\n# Klávesnice - pro vstup textu a �řízení poč�ítač�e\n# Za�řízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní za�řízení\nMezi zař�ízení, která nemají př�ímý vliv na komunikaci patř�í zejména:\n# Tiskárny\n# Za�řízení pro snímání obrazu\n# Souč�ásti, které neumožň�ují komunikaci (např�. rozšíř�ení pamě�ti,\ndisky...)\n\nDisplaye\n# CRT\n# Displej s kapalnými krystaly (LCD)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\nProjetory\n# CRT\n# LCD\n# LPD\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(489,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních za�řízení s p�římým vlivem na komunikaci pat�í\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací za�řízení - pro vstup sou�řadnic\n# Klávesnice - pro vstup textu a �řízení poč�ítač�e\n# Za�řízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní za�řízení\nMezi zař�ízení, která nemají př�ímý vliv na komunikaci patř�í zejména:\n# Tiskárny\n# Za�řízení pro snímání obrazu\n# Souč�ásti, které neumožň�ují komunikaci (např�. rozšíř�ení pamě�ti,\ndisky...)\n\nDisplaye\n# CRT\n# Displej s kapalnými krystaly (LCD)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\nProjetory\n# CRT\n# LCD\n# LPD\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(490,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech mů�že být změ�na rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvk� dána normou\n# Módní trendy – pr�můslové návrhářství podléhá silným módním trend�em\n# Nevšímavost – výrobce n�kdy o zp�sobu obsluhy příliš neuvažuje \n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(491,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje \n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(492,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje \n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(493,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\nMody komunikace\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(494,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(495,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(496,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(497,'','utf-8'),(498,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(499,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(500,'','utf-8'),(501,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(502,'','utf-8'),(503,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\")\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(504,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se p�i komunikaci s po�íta�i projevují\njen velmi z�ídka a obecn� na n� není t�eba brát p�íliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je t�eba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidn�ní“ uživatele (například zelená) �i naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon �i vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítaá z technických důvod� zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýrazně�ní strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i př�i velmi malých rozdílech jas� v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(505,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX) \'\'U každého záznamu nese prioritu tohoto servru\'\'\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložný server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\n\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\n\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\n\nId – vyjadřuje zkreslení způsobené zpožděním a echo\n\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(506,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX) \'\'U každého záznamu nese prioritu tohoto servru\'\'\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložní server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)======\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\n\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\n\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\n\nId – vyjadřuje zkreslení způsobené zpožděním a echo\n\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(507,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 02, 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 31\n\n\'\'\'Hotovo\'\'\': 01, 11, 12, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(508,'=Volnočasové programování=\n\n[[Den první - Fibonachi nerekurzivně]]','utf-8'),(509,'\'\'\'Sebevědomé zadání úkolu:\'\'\'\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\nVytiskni n-tý člen posloupnosti. N zadej do konzole.','utf-8'),(510,'\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n\'\'\'Kód:\'\'\'\n\n<nowiki>\n#include <stdio.h>\n#include <stdlib.h>\n\nint fibo(int q,int a, int b);\nint main()\n\n\n{\n int pocetkroku;\n int *navraceno;\n printf(\"pocet kroku?\\n\");\n scanf(\"%d\", &pocetkroku);\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n // navraceno[0] = fibo(5,1,1)[0];\n // navraceno[1] = fibo(5,1,1)[1];\n navraceno = fibo(pocetkroku,1,1);\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n return 0;\n}\n\nint fibo(int q,int a, int b)\n{\n int x;\n int y;\n int z;\n int i=0;\n int navraty [2];\n while (i<q)\n {\n i=i+1;\n z=a+b;\n b=a;\n a=z;\n printf(\"%d \\n\",z);\n }\n navraty[0] =i;\n navraty[1] =z;\n return navraty;\n\n }\n}\n</nowiki>','utf-8'),(511,'=Řešený úkol=\n\n\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n=Řešení=\n\n\'\'\'Kód:\'\'\'\n\n<nowiki>\n#include <stdio.h>\n#include <stdlib.h>\n\nint fibo(int q,int a, int b);\nint main()\n\n\n{\n int pocetkroku;\n int *navraceno;\n printf(\"pocet kroku?\\n\");\n scanf(\"%d\", &pocetkroku);\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n // navraceno[0] = fibo(5,1,1)[0];\n // navraceno[1] = fibo(5,1,1)[1];\n navraceno = fibo(pocetkroku,1,1);\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n return 0;\n}\n\nint fibo(int q,int a, int b)\n{\n int x;\n int y;\n int z;\n int i=0;\n int navraty [2];\n while (i<q)\n {\n i=i+1;\n z=a+b;\n b=a;\n a=z;\n printf(\"%d \\n\",z);\n }\n navraty[0] =i;\n navraty[1] =z;\n return navraty;\n\n }\n}\n</nowiki>\n\n=Poznámky=','utf-8'),(512,'=Řešený úkol=\n\n\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n=Řešení=\n\n\'\'\'Kód:\'\'\'\n\n<nowiki>\n#include <stdio.h>\n\n#include <stdlib.h>\n\n\nint fibo(int q,int a, int b);\n\nint main()\n\n{\n\n int pocetkroku;\n\n int *navraceno;\n\n printf(\"pocet kroku?\\n\");\n\n scanf(\"%d\", &pocetkroku);\n\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n\n navraceno = fibo(pocetkroku,1,1);\n\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n\n return 0;\n\n}\n\n\nint fibo(int q,int a, int b)\n\n{\n\n int x;\n\n int y;\n\n int z;\n\n int i=0;\n\n int navraty [2];\n\n while (i<q)\n\n {\n\n i=i+1;\n\n z=a+b;\n\n b=a;\n\n a=z;\n\n printf(\"%d \\n\",z);\n\n }\n\n navraty[0] =i;\n\n navraty[1] =z;\n\n return navraty;\n\n }\n\n}\n</nowiki>\n\n=Poznámky=','utf-8'),(513,'=Řešený úkol=\n\n\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n=Řešení=\n\n\'\'\'Kód:\'\'\'\n\n<nowiki>#include <stdio.h>\n\n#include <stdlib.h>\n\n\nint fibo(int q,int a, int b);\n\nint main()\n\n{\n\n int pocetkroku;\n\n int *navraceno;\n\n printf(\"pocet kroku?\\n\");\n\n scanf(\"%d\", &pocetkroku);\n\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n\n navraceno = fibo(pocetkroku,1,1);\n\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n\n return 0;\n\n}\n\n\nint fibo(int q,int a, int b)\n\n{\n\n int x;\n\n int y;\n\n int z;\n\n int i=0;\n\n int navraty [2];\n\n while (i<q)\n\n {\n\n i=i+1;\n\n z=a+b;\n\n b=a;\n\n a=z;\n\n printf(\"%d \\n\",z);\n\n }\n\n navraty[0] =i;\n\n navraty[1] =z;\n\n return navraty;\n\n }\n\n}\n</nowiki>\n\n=Poznámky=','utf-8'),(514,'=Řešený úkol=\n\n\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n=Řešení=\n\n\'\'\'Kód:\'\'\'\n<nowiki>#include <stdio.h>\n\n#include <stdlib.h>\n\n\nint fibo(int q,int a, int b);\n\nint main()\n\n{\n\n int pocetkroku;\n\n int *navraceno;\n\n printf(\"pocet kroku?\\n\");\n\n scanf(\"%d\", &pocetkroku);\n\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n\n navraceno = fibo(pocetkroku,1,1);\n\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n\n return 0;\n\n}\n\n\nint fibo(int q,int a, int b)\n\n{\n\n int x;\n\n int y;\n\n int z;\n\n int i=0;\n\n int navraty [2];\n\n while (i<q)\n\n {\n\n i=i+1;\n\n z=a+b;\n\n b=a;\n\n a=z;\n\n printf(\"%d \\n\",z);\n\n }\n\n navraty[0] =i;\n\n navraty[1] =z;\n\n return navraty;\n\n }\n\n}\n</nowiki>\n\n=Poznámky=','utf-8'),(515,'=Řešený úkol=\n\n\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n=Řešení=\n\n\'\'\'Kód:\'\'\'\n <nowiki>#include <stdio.h>\n#include <stdlib.h>\n\nint fibo(int q,int a, int b);\nint main()\n{\n int pocetkroku;\n int *navraceno;\n\n printf(\"pocet kroku?\\n\");\n scanf(\"%d\", &pocetkroku);\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n\n navraceno = fibo(pocetkroku,1,1);\n\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n\n return 0;\n}\n\nint fibo(int q,int a, int b)\n{\n int x;\n int y;\n int z;\n int i=0;\n int navraty [2];\n\n while (i<q)\n {\n i=i+1;\n z=a+b;\n b=a;\n a=z;\n\n printf(\"%d \\n\",z);\n }\n\n navraty[0] =i;\n navraty[1] =z;\n\n return navraty;\n }\n}</nowiki>\n\n=Poznámky=','utf-8'),(516,'=Řešený úkol=\n\n\'\'\'Sebevědomé zadání úkolu:\'\'\'\n\nNapiš do texťálu rekurzivní kód pro Fibonachiho posloupnost\n\n\'\'\'Realistické zadání úkolu:\'\'\'\n\nStáhni codeblocksy a nějak naprogramuj fibonachiho posloupnost.\n\n\'\'\'Rozšířené zadání:\'\'\'\n\nVytiskni n-tý člen posloupnosti. N zadej do konzole.\n\n=Řešení=\n\n\'\'\'Kód:\'\'\'\n <nowiki>#include <stdio.h>\n#include <stdlib.h>\n\nint fibo(int q,int a, int b);\nint main()\n{\n int pocetkroku;\n int *navraceno;\n\n printf(\"pocet kroku?\\n\");\n scanf(\"%d\", &pocetkroku);\n printf(\"pocet kroku=%d\\n\",pocetkroku);\n\n navraceno = fibo(pocetkroku,1,1);\n\n printf(\"i:%d, z:%d\",navraceno[0],navraceno[1]);\n\n return 0;\n}\n\nint fibo(int q,int a, int b)\n{\n int x;\n int y;\n int z;\n int i=0;\n int navraty [2];\n\n while (i<q)\n {\n i=i+1;\n z=a+b;\n b=a;\n a=z;\n\n printf(\"%d \\n\",z);\n }\n\n navraty[0] =i;\n navraty[1] =z;\n\n return navraty;\n }\n}</nowiki>\n\n=Poznámky=\n\n===Obecné===\n#Nezapomenou nainstalovat compiler (většinou se nainstaluje sám s vývojovým prostředím - eclipse, netbeans ...)\n#Vždy založit projekt => jednoduší kompilace a spuštění\n#Používat a nezavírat panel \"Manager souborů\"\n#V mainu se nepáchají hovadiny jen se volají další funkce (metody)\n\n===Funkce===\n#fibo(pocetkroku,1,1); je deklarace funkce. V C se musí zkopírovat nahoru.\n#q, a, b jsou parametry funkce\n#parametry funkce se do ní předávají při jejím volání (fibo(pocetkroku,1,1);)\n#ve funkci se parametry používají jako proměnné (zatím se z nich jen čte)\n#Za deklarací funkce násedují složené závorky. To co je v nich je definice funkce.\n#Funkce může mít návratovou hodnotu. Její typ je návratovým typem funkce: \'\'\'int\'\'\' fibo(pocetkroku,1,1);\n#Návratová hodnota se vrací pomocí \'\'\'return\'\'\' na konci funkce. \n#Return vrací pouze jednu proměnnou. Tato proměnná může být neatomická (například pole)\n#Hodnotu, která se vrátila z funkce přiřadíme do proměnné úplně obyčejným způsobem. navraceno = fibo(pocetkroku,1,1);\n#Ve funkci se dají vytvářet lokální proměnné (z, i). Jejich existence končí po ukončení funkce.\n#Main je funkce jako každá jiná, jen se automaticky spouští jako první\n\n===While cyklus===\n#while pak je v závorkách co nejpřesnější podmínka a pak ve složených závorkách kód, který se opakuje (obecně platí pro všechny řídící struktury - foreach, if...)\n\n===Pole===\n#neatomický datový typ\n#pole může mít prvky jakéhokoli typu, vždy však všechny stejné\n# int *navraceno; deklarace, když nevím jak bude dlouhé\n# int navraty [2]; deklarace, když znám délku\n# přístup na xté políčko v poli navraty[x]. Stejně u vepsání do něj\n\n===Vstupy a výstupy programu===\n printf(\"pocet kroku?\\n\");\n\n scanf(\"%d\", &pocetkroku);\n\n printf(\"pocet kroku=%d\\n\",pocetkroku);','utf-8'),(517,'=Volnočasové programování=\n\n[[Den první - Fibonachi nerekurzivně]]\n\n[[Druhy ukol - promenne]]','utf-8'),(518,'=Proměnné=\n\n===Zadání===\nVytvořit nový projekt\nUdělat funkci, ve které se bude pracovat.\nV této funkci vytvořit proměnné typu: int, char, string, double, pole integerlů, pole stringů.\nTyto proměnné naplnit hodnotami. U Atomických proměnných načíst hodnoty ze vstupu (v mainu) a předat je do funkce. U neatomických napnit ve funkci nějakýma hodnotama.\nVšechny tyto proměnné pěkně vypsat na výstup.','utf-8'),(519,'=Volnočasové programování=\n\n[[Den první - Fibonachi nerekurzivně]]\n\n[[Druhy ukol - promenne]]\n\n[[Pole]]','utf-8'),(520,'===Zadání===\n\nVytvořit dvě pole. Jedno z nich naplnit hodnotami.\n\nVytvořit funkci, která nakopíruje jedno pole do druhého.','utf-8'),(521,'===Zadání===\n\n\'\'\'První úkol\'\'\'\n\nEditovat program na fibonachiho tak, aby prvky posloupnosti ukládal do pole, které pak vypíše.\n\n\'\'\'Druhý úkol\'\'\'\n\nVytvořit dvě pole. Jedno z nich naplnit hodnotami.\n\nVytvořit funkci, která nakopíruje jedno pole do druhého.','utf-8'),(522,'===Zadání===\n\n\'\'\'První úkol\'\'\'\n\nEditovat program na fibonachiho tak, aby prvky posloupnosti ukládal do pole, které pak vypíše.\n\n\'\'\'Druhý úkol\'\'\'\n\nVytvořit dvě pole. Jedno z nich naplnit hodnotami.\n\nVytvořit funkci, která nakopíruje jedno pole do druhého.\n\n\n===Poznámky===\nNé ve všech jazycích jde hodnota některých proměnných jedné proměnné jen tak přiřadit do druhé stejného typu.','utf-8'),(523,'=Volnočasové programování=\n\n[[Den první - Fibonachi nerekurzivně]]\n\n[[Druhy ukol - promenne]] (vstupy a vystupy C)\n\n[[Pole]]','utf-8'),(524,'=Volnočasové programování=\n\n[[Den první - Fibonachi nerekurzivně]]\n\n[[Druhy ukol - promenne]] (vstupy a vystupy C)\n\n[[Pole]]\n\n[[Větvení kódu]]','utf-8'),(525,'===Zadání===\n\nNapiš program, který načte ze vstupu číslo (n) a podle toho, do kterého toto číslo patří intervalu spustí příslušející funkci.\n\nn je menší než 3, vypíše\"n = psychologie\"\nn je mezi 4 a 6, vypíše \"n = sociologie\"\nn je větší než 6, vypíše \"n = religionistika\"\n\nudělej to tak, aby se program po ukončení prvního výpisu neukončil, ale aby čekal na další číslo k vyhodnocení.\n\nprogram se vypne po načtení čísla 0.','utf-8'),(526,'===Zadání===\n\nNapiš program, který načte ze vstupu číslo (n) a podle toho, do kterého toto číslo patří intervalu spustí příslušející funkci.\n\nn je menší než 3, vypíše\"n = psychologie\"\n\nn je mezi 4 a 6, vypíše \"n = sociologie\"\n\nn je větší než 6, vypíše \"n = religionistika\"\n\nudělej to tak, aby se program po ukončení prvního výpisu neukončil, ale aby čekal na další číslo k vyhodnocení.\n\nprogram se vypne po načtení čísla 0.','utf-8'),(527,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 03, 04, 05, 06, 07, 08, 09, 10, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 13, 31, 02\n\n\'\'\'Hotovo\'\'\': 01, 11, 12, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12 (13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(528,'=====Kombinační logické obvody===== \nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n=====Pravdivostní tabulka=====\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).','utf-8'),(529,'=====Kombinační logické obvody=====\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n=====Pravdivostní tabulka=====\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).','utf-8'),(530,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).','utf-8'),(531,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).','utf-8'),(532,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.','utf-8'),(533,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).','utf-8'),(534,'Funkce multiplexoru jako přepínače','utf-8'),(535,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]','utf-8'),(536,'multiplexor se čtyřmi vstupy','utf-8'),(537,'Pravdivostní tabulka pro multiplexor se dvěmi vstupy','utf-8'),(538,'multiplexor navržený pomocí tří hradel NAND a jednoho inventoru','utf-8'),(539,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.','utf-8'),(540,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====','utf-8'),(541,'1 to 2 demultiplexor','utf-8'),(542,'','utf-8'),(543,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]','utf-8'),(544,'','utf-8'),(545,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]','utf-8'),(546,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======','utf-8'),(547,'','utf-8'),(548,'','utf-8'),(549,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.','utf-8'),(550,'','utf-8'),(551,'','utf-8'),(552,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout.\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======','utf-8'),(553,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout.\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér.','utf-8'),(554,'','utf-8'),(555,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér.','utf-8'),(556,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce.\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér.','utf-8'),(557,'','utf-8'),(558,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce.\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]','utf-8'),(559,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce.\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----','utf-8'),(560,'','utf-8'),(561,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----','utf-8'),(562,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní===\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(563,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní\n\n Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní\n\n Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(564,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Událostmi řízené systémy\'\'\' \n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(565,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\n\n\n\n\'\'\'Mody komunikace\'\'\'\n\nAktivní vs. pasivní komunikace \n\n==Událostmi řízené systémy==\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\'\'\'\nStandardní prvky rozhraní\'\'\' \n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n\nSystémy řízené událostmi\n\nStandardní prvky rozhraní','utf-8'),(566,'','utf-8'),(567,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Mody komunikace==\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realozováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nPři tom se zasílají zprávy v takovéto podpbě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\n\'\'\'Standardní prvky rozhraní\'\'\' \n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(568,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Mody komunikace==\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n# Implementace „Místem v programu“ \n# Implementace „Stavovou proměnnou“ \n\n\'\'\'Standardní prvky rozhraní\'\'\' \n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(569,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Mody komunikace==\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat \n\n==Standardní prvky rozhraní\'== \n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n===Periferní zařízení===\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(570,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Mody komunikace==\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat \n\n==Standardní prvky rozhraní\'== \n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n====Strojově orientované rozhraní====\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(571,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n==Mody komunikace==\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat \n\n==Standardní prvky rozhraní\'== \n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(572,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nhttp://wiki.koranda.net/doku.php?id=szz\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 03, 04, 05, 06, 07, 08, 09, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 14, 31, 02\n\n\'\'\'Hotovo\'\'\': 01, 11, 12, 13, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%) (14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(573,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 03, 04, 05, 06, 07, 08, 09, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 14, 31, 02\n\n\'\'\'Hotovo\'\'\': 01, 11, 12, 13, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%) (14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01 (02, 03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(574,'','utf-8'),(575,'','utf-8'),(576,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n[[Soubor:Decoder.png]]\n\n----','utf-8'),(577,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----','utf-8'),(578,'','utf-8'),(579,'','utf-8'),(580,'','utf-8'),(581,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulka.\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]','utf-8'),(582,'','utf-8'),(583,'','utf-8'),(584,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n----\n\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]','utf-8'),(585,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n----\n\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]\n\nAngl. Ripple carry - carry musí procházet přes všechny stupně čítačky. Cenově výhodné řešení, pomalé. Zpoždění je úměrné počtu bitů. Urychlit je to možné použitím paralelní struktury.\n\n----\n\n\n=====ALU=====','utf-8'),(586,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]\n\nAngl. Ripple carry - carry musí procházet přes všechny stupně čítačky. Cenově výhodné řešení, pomalé. Zpoždění je úměrné počtu bitů. Urychlit je to možné použitím paralelní struktury.\n\n----\n\n\n=====ALU=====','utf-8'),(587,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]\n\nAngl. Ripple carry - carry musí procházet přes všechny stupně čítačky. Cenově výhodné řešení, pomalé. Zpoždění je úměrné počtu bitů. Urychlit je to možné použitím paralelní struktury.\n\n----\n\n\n=====ALU=====\nJe to zkratka z angl. Arithmetic-Logic Unit, neboli také aritmeticko-logická jednotka. Patří mezi základní stavební prvky počítače. V ALU se vykonávají všechny aritmetické a logické operace s číslami (operandy) načtenými z operační paměti v pevné řádové čárce.\n\nVstupem jsou dva n-bitové operandy A a B. Aritmetická a logická jednotka jsou oddělené.\n\n\'\'\'Aritmetické operace:\'\'\'\n# sčítání\n# odčítání\n# násobení\n# dělení\n# bitový posuv (doprava i doleva)\n# inkrement\n# dekrement\n\n\'\'\'Logické operace:\'\'\'\n# Logický součin - AND\n# Logický součet - OR\n# Negace - NOT\n# NAND\n# NOR\n# XOR\n# porovnání dvou čísel','utf-8'),(588,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'(A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]\n\nAngl. Ripple carry - carry musí procházet přes všechny stupně čítačky. Cenově výhodné řešení, pomalé. Zpoždění je úměrné počtu bitů. Urychlit je to možné použitím paralelní struktury.\n\n----\n\n\n=====ALU=====\nJe to zkratka z angl. Arithmetic-Logic Unit, neboli také aritmeticko-logická jednotka. Patří mezi základní stavební prvky počítače. V ALU se vykonávají všechny aritmetické a logické operace s číslami (operandy) načtenými z operační paměti v pevné řádové čárce. Pro práci s operandy v plovoucí řádové čárce se používá FPU, Floating-Point Unit.\n\nVstupem jsou dva n-bitové operandy A a B. Aritmetická a logická jednotka jsou oddělené.\n\n\'\'\'Aritmetické operace:\'\'\'\n# sčítání\n# odčítání\n# násobení\n# dělení\n# bitový posuv (doprava i doleva)\n# inkrement\n# dekrement\n\n\'\'\'Logické operace:\'\'\'\n# Logický součin - AND\n# Logický součet - OR\n# Negace - NOT\n# NAND\n# NOR\n# XOR\n# porovnání dvou čísel','utf-8'),(589,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 14, 31, 03\n\n\'\'\'Hotovo\'\'\': 01, 11, 12, 13, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%) (14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 (03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(590,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 14, 31, 03\n\n\'\'\'Hotovo\'\'\': 01, 02, 11, 12, 13, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%) (14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 (03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(591,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.','utf-8'),(592,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.','utf-8'),(593,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.','utf-8'),(594,'=Obecně=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(595,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/.c\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 14, 31, 03\n\n\'\'\'Hotovo\'\'\': 01, 02, 11, 12, 13, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%) (14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 (03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(596,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 14, 31, 03\n\n\'\'\'Hotovo\'\'\': 01, 02, 11, 12, 13, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%) (14, 15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 (03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(597,'=Obecně=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(598,'=Obecně=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Vata==\n\n===Signál===\n\n===Komplexní exponenciála===\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(599,'=Obecně=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Vata==\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\nInteligentně: jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá.\n\nRozlišujeme signály spojité a diskrétní.\n\n====Spojitý signál====\nJeho hodnota je definována v každém časovém okamžiku\n====Diskrétní signál====\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním.\n\n===Komplexní exponenciála===\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(600,'=Obecně=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Vata==\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá.\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním.\n\n===Komplexní exponenciála===\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(601,'=Vata=\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá.\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(602,'=Vata=\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá.\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(603,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá.\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(604,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(605,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné. \'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(606,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(607,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(608,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí <m> f(t) = Asin(omega t + varphi_0)</m>\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(609,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí <m> f(t) = C_1 cosin(omega t + varphi_0)</m>\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(610,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí <m> f(t) = C_1 cos(omega t + varphi_0)</m>\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(611,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> \n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(612,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(613,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(614,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel. Důležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. <m> e^(jx) </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(615,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel. Důležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. <m> e^{jx} </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(616,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(617,'','utf-8'),(618,'','utf-8'),(619,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(620,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(621,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(622,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos{omega_1 t} = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(623,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Diskrétní==\n\n==Spojité==','utf-8'),(624,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n==Fourierova řada==','utf-8'),(625,'','utf-8'),(626,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.','utf-8'),(627,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů.\n\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.','utf-8'),(628,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.','utf-8'),(629,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(630,'','utf-8'),(631,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilbní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky.\nBKO mají mnoho variant a provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(632,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky.\nBKO mají mnoho variant a provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(633,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky.\nBKO mají mnoho variant a provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n=====R-S klopný obvod=====\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(634,'','utf-8'),(635,'','utf-8'),(636,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky.\nBKO mají mnoho variant a provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n=====R-S klopný obvod=====\nNejjednodušším sekvenčním obvodem je klopný obvod R-S (R-S KO), který je základem i mnohých složitějších sekvenčních obvodů. Je to prakticky jednobitová paměť.\n\nR-Sklopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n\n======R-S NON klopný obvod NAND======\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(637,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n=====R-S klopný obvod=====\nNejjednodušším sekvenčním obvodem je klopný obvod R-S (R-S KO), který je základem i mnohých složitějších sekvenčních obvodů. \n\nR-Sklopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n\n======R-S NON klopný obvod NAND======\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(638,'','utf-8'),(639,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n=====R-S klopný obvod=====\nNejjednodušším sekvenčním obvodem je klopný obvod R-S (R-S KO), který je základem i mnohých složitějších sekvenčních obvodů. \n\nR-Sklopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(640,'','utf-8'),(641,'','utf-8'),(642,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n===Klopné obvody===\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n====Astabilní klopný obvod====\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n====Monostabilní klopný obvod====\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n====Schmittův klopný obvod====\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n====Bistabilní klopný obvod====\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n=====R-S klopný obvod=====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(643,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n=====R-S klopný obvod=====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(644,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(645,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(646,'','utf-8'),(647,'','utf-8'),(648,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(649,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n=====D klopný obvod=====\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(650,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(651,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu\n\n======D klopný obvod řízený úrovní======\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(652,'','utf-8'),(653,'','utf-8'),(654,'','utf-8'),(655,'','utf-8'),(656,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(657,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(658,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'); INSERT INTO `text` VALUES (659,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(660,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(661,'','utf-8'),(662,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(663,'','utf-8'),(664,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(665,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L(kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(666,'','utf-8'),(667,'','utf-8'),(668,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'Náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(669,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n=====J-K klopný obvod=====\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(670,'','utf-8'),(671,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n=====D klopný obvod=====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n======D klopný obvod řízený úrovní======\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n======D klopný obvod řízený hranou======\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n=====J-K klopný obvod=====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'.\n\n======J-K klopný obvod řízený hranou======\n======J-K klopný obvod řízený impulzem======\n\n=====T klopný obvod=====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(672,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{+infty}{k = -infty}{c_ke^{jkomga_1t}} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(673,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{+infty}{k = -infty}{c_k e^{jkomga_1t}} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(674,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{+infty}{k = -infty}{c_k e^{j k omga_1 t}} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(675,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{+infty}{k = -infty}{c_k e^{j k omega_1 t}} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(676,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(677,'','utf-8'),(678,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(679,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(680,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(681,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty}C_k cos(k omega_1 t + phi_k) </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(682,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {C_k cos(k omega_1 t + phi_k)} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(683,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(684,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2|c_k|</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(685,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jsme totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(686,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'.\n\n=====J-K klopný obvod řízený hranou=====\n=====J-K klopný obvod řízený impulzem=====\n\n====T klopný obvod====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(687,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'.\n\n=====J-K klopný obvod řízený hranou=====\n\n=====J-K klopný obvod řízený impulzem=====\n\n====T klopný obvod====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(688,'','utf-8'),(689,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné sinusovky, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných sinusovek (případně komplexních exponenciál).\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(690,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(691,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.','utf-8'),(692,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'.\n\n=====J-K klopný obvod řízený hranou=====\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nJak jsme si již řekli, problémem klopných obvodů R-S je jejich zakázaný stav, kdy se snažíme zároveň nastavit i vynulovat. Ke stejným problémům by došlo i u J-K klopného obvodu na obrázku při J = K = H, pokud by nebyla zavedena zpětná vazba z výstupu Q na vstup K a z výstupu Q\' na vstup J. Zpětné vazby způsobují, že je průchozí vždy pouze jedno vstupní hradlo NAND, a proto nemůže nastat stav, kdy je klopný obvod současně nulován i nastavován. (vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.)\n\n====T klopný obvod====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(693,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\nFT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný signál.','utf-8'),(694,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\nPodstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný signál.\'\'\'','utf-8'),(695,'','utf-8'),(696,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod řízený hranou=====\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n====T klopný obvod====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(697,'','utf-8'),(698,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku.\n\n====T klopný obvod====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(699,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný signál.\'\'\'','utf-8'),(700,'','utf-8'),(701,'','utf-8'),(702,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(703,'','utf-8'),(704,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n===Čítače===\n\n===Registry===\n\n===Stavové automaty===','utf-8'),(705,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'','utf-8'),(706,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'','utf-8'),(707,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'','utf-8'),(708,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\n==Spojitá==\n\n==Diskrétní==','utf-8'),(709,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\n==Spojitá==\n\n==Diskrétní==','utf-8'),(710,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\n\n<m> X(j omega) = int{- infty}{infty}{x(t) * e^{j omega t}}</m>\n\n==Diskrétní==','utf-8'),(711,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\n==Diskrétní==','utf-8'),(712,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\n==Diskrétní==','utf-8'),(713,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==','utf-8'),(714,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot).','utf-8'),(715,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 phi}/N k n}}</m>','utf-8'),(716,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>','utf-8'),(717,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.','utf-8'),(718,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]','utf-8'),(719,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]','utf-8'),(720,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>','utf-8'),(721,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t}}</m>\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>','utf-8'),(722,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t}}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t}}</m>\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>','utf-8'),(723,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>','utf-8'),(724,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 31, 03\n\n\'\'\'Hotovo\'\'\': 01, 02, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%), 14 (15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 (03, 04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(725,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(726,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>','utf-8'),(727,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(728,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchornní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné.\n\n===Asynchronní čítač===\n\n===Synchronní čítač===\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(729,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchornní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\n\n===Synchronní čítač===\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(730,'','utf-8'),(731,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\n===Synchronní čítač===\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(732,'','utf-8'),(733,'','utf-8'),(734,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje.\n[[Soubor:Citac3.png]]\n\n===Synchronní čítač===\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(735,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje.\n[[Soubor:Citac3.png]]\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Pokud se vyžaduje vysoký kmitočet hodinového signálu, je vhodný jen pro omezený počet bitů\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(736,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(737,'diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika','utf-8'),(738,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(739,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Registry==\n\n==Stavové automaty==','utf-8'),(740,'','utf-8'),(741,'','utf-8'),(742,'','utf-8'),(743,'','utf-8'),(744,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Posuvné registry==\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n==Stavové automaty==','utf-8'),(745,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n==Stavové automaty==','utf-8'),(746,'','utf-8'),(747,'','utf-8'),(748,'','utf-8'),(749,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n==Stavové automaty==\nStavové automaty jsou sekvenční subsystémy představující zobecnění čítačů. Mohou být synchronní i asynchronní. Čítače můžeme pokládat za jednoduchý druh (zvláštní případ) stavových automatů.\n\nKonečný automat je šestice KA=(X,Y,Q,q0,P,V), kde:\n# X - vstupní abeceda (množina hodnot vstupních proměnných)\n# Y - výstupní abeceda (množina hodnot výstupních proměnných)\n# Q - vnitřní abeceda (množina hodnot vektoru vnitřního stavu - seznam stavů?)\n# q0 - patří do Q, počáteční stav, ze kterého se vždy startuje\n# P - přechodová funkce\n# V - výstupní funkce - Mealy, Moore, nebo jejich kombinace\n\nStavové automaty představují přechod od běžné logiky k mikrokontrolérům. Sekvenční způsob práce mikrokontrolérů (postupné vykonávání instrukcí) dovoluje mikrokontroléry použít v mnoha aplikacích pro řešení nejrůznějších úloh, a propůjčuje jim tedy velkou univerzálnost. Na druhé straně je však příčinou nižší rychlosti reakce, protože pro vytvoření odpovídajících výstupních signálů musí u typického mikrokontroléru proběhnout několik (často velmi mnoho) instrukčních cyklů. Pokud algoritmus vytvoření výstupních signálů není příliš složitý, je obvykle možno stejnou úlohu řešit stavovým automatem, který má strukturu navrženou speciálně pro řešený problém. Tato struktura pak bývá výrazně jednodušší a rychlejší.\n\nU čítačů jsou přechody převážně mezi sousedními stavy (inkrementace, dekrementace) a mají omezený počet vstupů, které ovlivňují chování čítače jednoduchým způsobem (up/down, reset...).\n\nU stavových automatů však mohou být přechody uspořádány zcela obecně, o \"sousedných stavech\" spravidla nemá smysl mluvit. Vstupů bývá víc než u čítačů, ty ovlivňují přechody mezi stavy obecným způsobem, které často nejde obecně popsat tak, aby to platilo pro celý automat, musí to být pro každý stav zvlášť.\n\n======Moorův automat======\nVýstup je funkcí pouze současného stavu.\n[[Soubor:Moore.png]]\n\n======Mealyho automat======\nVýstup je funkcí současného stavu a vstupu.\n[[Soubor:Mealy.png]]\n\n======Mealyho/Moorův automat======\nSoučasné využití vlastností výstupní funkce Mealyho i Moorova automatu.\n[[Soubor:Mealymoore.png]]','utf-8'),(750,'','utf-8'),(751,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n==Stavové automaty==\nStavové automaty jsou sekvenční subsystémy představující zobecnění čítačů. Mohou být synchronní i asynchronní. Čítače můžeme pokládat za jednoduchý druh (zvláštní případ) stavových automatů.\n\nKonečný automat je šestice KA=(X,Y,Q,q0,P,V), kde:\n# X - vstupní abeceda (množina hodnot vstupních proměnných)\n# Y - výstupní abeceda (množina hodnot výstupních proměnných)\n# Q - vnitřní abeceda (množina hodnot vektoru vnitřního stavu - seznam stavů?)\n# q0 - patří do Q, počáteční stav, ze kterého se vždy startuje\n# P - přechodová funkce\n# V - výstupní funkce - Mealy, Moore, nebo jejich kombinace\n\nStavové automaty představují přechod od běžné logiky k mikrokontrolérům. Sekvenční způsob práce mikrokontrolérů (postupné vykonávání instrukcí) dovoluje mikrokontroléry použít v mnoha aplikacích pro řešení nejrůznějších úloh, a propůjčuje jim tedy velkou univerzálnost. Na druhé straně je však příčinou nižší rychlosti reakce, protože pro vytvoření odpovídajících výstupních signálů musí u typického mikrokontroléru proběhnout několik (často velmi mnoho) instrukčních cyklů. Pokud algoritmus vytvoření výstupních signálů není příliš složitý, je obvykle možno stejnou úlohu řešit stavovým automatem, který má strukturu navrženou speciálně pro řešený problém. Tato struktura pak bývá výrazně jednodušší a rychlejší.\n\nU čítačů jsou přechody převážně mezi sousedními stavy (inkrementace, dekrementace) a mají omezený počet vstupů, které ovlivňují chování čítače jednoduchým způsobem (up/down, reset...).\n\nU stavových automatů však mohou být přechody uspořádány zcela obecně, o \"sousedných stavech\" spravidla nemá smysl mluvit. Vstupů bývá víc než u čítačů, ty ovlivňují přechody mezi stavy obecným způsobem, které často nejde obecně popsat tak, aby to platilo pro celý automat, musí to být pro každý stav zvlášť.\n\nKonečné automaty mohou být buď plně definované, nebo neúplně definované. Nedefinované výstupy není třeba uvádět.\n\n======Moorův automat======\nVýstup je funkcí pouze současného stavu.\n[[Soubor:Moore.png]]\n\n======Mealyho automat======\nVýstup je funkcí současného stavu a vstupu.\n[[Soubor:Mealy.png]]\n\n======Mealyho/Moorův automat======\nSoučasné využití vlastností výstupní funkce Mealyho i Moorova automatu.\n[[Soubor:Mealymoore.png]]','utf-8'),(752,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n----\n\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n----\n\n\n==Stavové automaty==\nStavové automaty jsou sekvenční subsystémy představující zobecnění čítačů. Mohou být synchronní i asynchronní. Čítače můžeme pokládat za jednoduchý druh (zvláštní případ) stavových automatů.\n\nKonečný automat je šestice KA=(X,Y,Q,q0,P,V), kde:\n# X - vstupní abeceda (množina hodnot vstupních proměnných)\n# Y - výstupní abeceda (množina hodnot výstupních proměnných)\n# Q - vnitřní abeceda (množina hodnot vektoru vnitřního stavu - seznam stavů?)\n# q0 - patří do Q, počáteční stav, ze kterého se vždy startuje\n# P - přechodová funkce\n# V - výstupní funkce - Mealy, Moore, nebo jejich kombinace\n\nStavové automaty představují přechod od běžné logiky k mikrokontrolérům. Sekvenční způsob práce mikrokontrolérů (postupné vykonávání instrukcí) dovoluje mikrokontroléry použít v mnoha aplikacích pro řešení nejrůznějších úloh, a propůjčuje jim tedy velkou univerzálnost. Na druhé straně je však příčinou nižší rychlosti reakce, protože pro vytvoření odpovídajících výstupních signálů musí u typického mikrokontroléru proběhnout několik (často velmi mnoho) instrukčních cyklů. Pokud algoritmus vytvoření výstupních signálů není příliš složitý, je obvykle možno stejnou úlohu řešit stavovým automatem, který má strukturu navrženou speciálně pro řešený problém. Tato struktura pak bývá výrazně jednodušší a rychlejší.\n\nU čítačů jsou přechody převážně mezi sousedními stavy (inkrementace, dekrementace) a mají omezený počet vstupů, které ovlivňují chování čítače jednoduchým způsobem (up/down, reset...).\n\nU stavových automatů však mohou být přechody uspořádány zcela obecně, o \"sousedných stavech\" spravidla nemá smysl mluvit. Vstupů bývá víc než u čítačů, ty ovlivňují přechody mezi stavy obecným způsobem, které často nejde obecně popsat tak, aby to platilo pro celý automat, musí to být pro každý stav zvlášť.\n\nKonečné automaty mohou být buď plně definované, nebo neúplně definované. Nedefinované výstupy není třeba uvádět.\n\n======Moorův automat======\nVýstup je funkcí pouze současného stavu.\n[[Soubor:Moore.png]]\n\n======Mealyho automat======\nVýstup je funkcí současného stavu a vstupu.\n[[Soubor:Mealy.png]]\n\n======Mealyho/Moorův automat======\nSoučasné využití vlastností výstupní funkce Mealyho i Moorova automatu.\n[[Soubor:Mealymoore.png]]','utf-8'),(753,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 31\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13(99%), 14 (15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(754,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat \n\n==Standardní prvky rozhraní\'== \n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(755,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n==Událostmi řízené systémy==\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat \n\n=Standardní prvky rozhraní=\n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(756,'=Komunikační kanály=\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n=Událostmi řízené systémy=\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat\n\n=Standardní prvky rozhraní=\n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(757,'=Komunikační kanály=\n\n= všechny způsoby komunikace a stroje\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n=Událostmi řízené systémy=\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n• Jednoduché a „přirozené“ \n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n• Těžko rozšiřitelné (více vstupních řádků)\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n• Obtížnější (automat je explicitně součástí návrhu) \n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat\n\n=Standardní prvky rozhraní=\n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(758,'=Komunikační kanály=\n\n= všechny způsoby komunikace a stroje\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n=Událostmi řízené systémy=\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n\n• Jednoduché a „přirozené“ \n\n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n\n• Těžko rozšiřitelné (více vstupních řádků)\n\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n\n• Obtížnější (automat je explicitně součástí návrhu) \n\n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n\n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat\n\n=Standardní prvky rozhraní=\n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(759,'=Komunikační kanály=\n\n= všechny způsoby komunikace a stroje\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n=Událostmi řízené systémy=\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n\n• Jednoduché a „přirozené“ \n\n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n\n• Těžko rozšiřitelné (více vstupních řádků)\n\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n\n• Obtížnější (automat je explicitně součástí návrhu) \n\n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n\n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat\n\n=Standardní prvky rozhraní=\n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n==Periferní zařízení==\n\n\'\'\'\'\'//Pravděpodobně již není nutně v rámci otázky.\'\'\'\'\'\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.','utf-8'),(760,'=Komunikační kanály=\n\n= všechny způsoby komunikace a stroje\n\nInformace se musejí přenášet v reálném čase, reprodukovatelné a pokud možno nezkreslené.\n\nKategorickým požadavkem je technická realizovatelnost a podstatná je i spolehlivost a cena příslušných periferních zařízení.\n\n\n\n==Smysly/média pro přenos informace==\n(to jsou ty komunickační kanály)\n\n\'\'\'Od stroje k člověku\'\'\'\n\nObraz, Hmat, Zvuk, Čich\n\n\'\'\'Od člověku ke stroji\'\'\'\n\nPohyb (hmat), Zvuk (řeč), Obraz (gesta)\n\nOkrajově se testuje napojení stroje přímo na nervovou soustavu. Zatím společensky nepřijatelné.\n\n[[Soubor:Smysly.jpg]]\n\n==Strojově orientované rozhraní==\n\nVětšinu se využívá rozhraní orientované na člověka, ale někdy to nejde.\n\n# Cena – stroj s rozhraním orientovaným na uživatele může být příliš drahý\n# Spolehlivost – přídavná elektronika může vést ke snížení spolehlivosti\n# Tradice – v některých případech může být změna rozhraní na překážku úspěchu\n# Normalizace – existují aplikace, u nichž je rozmístění a funkce prvků dána normou\n# Módní trendy – průmyslové návrhářství podléhá silným módním trendem\n# Nevšímavost – výrobce někdy o způsobu obsluhy příliš neuvažuje\n\n==Grafické rozhraní==\n\nNedokonalosti lidského zraku se při komunikaci s počítači projevují\njen velmi zřídka a obecně na ně není třeba brát příliš ohled. Existují\nvšak výjimky:\n# V rozhraní jako celku je třeba respektovat vnímavost lidského oka a lidské psychiky na barvy. Přitom lze s výhodou využít přirozených barev pro \"uklidnění“ uživatele (například zelená) či naopak pro jeho „zalarmování“ (například červená). Není-li uvedený požadavek splněn, může to snížit pracovní výkon či vyvolat nervozitu uživatele rozhraní. \n\n# Plynulé jasové přechody v obraze se na displejích počítá z technických důvodů zobrazují prostřednictvím diskrétních jasových úrovní. Díky anatomickému zvýraznění strmých změn jasu jsou však patrné „Machovy proužky“. Ty jsou patrné i při velmi malých rozdílech jasů v obrazech. Efekt Machových proužky se dá potlačit užitím metod, jako je například „dithering“.\n\n=Mody komunikace=\n\nAktivní vs. pasivní komunikace \n\n\'\'\'Aktivní\'\'\'\n\ntaková komunikace, kdy uživatel řídí činnost počítače, tedy kdy činnost počítače \nzáleží na vůli uživatele. Rozhraní používající aktivní komunikaci je například panel nástrojů v malování. Uživatel sám vybírá nástroj když se mu chce a pak následně uživatel sám určuje, kam se bude kreslit. Práce v příkazové řádce je aktivní: uživatel se rozhoduje, co napíše, jakou dávku spustí. \n\n\'\'\'Pasivní\'\'\'\n\ntaková komunikace, při níž obsluha v obecném smyslu odpovídá na dotazy počítače. Pasivní komunikací se myslí stav, kdy počítač vznese dotaz a uživatel na něj \nodpovídá. Toho lze v GUI dosáhnout například dialogovými boxy. \n\n[[Soubor:Aktivnivspasivni.png]]\n\n\\cite{Pirozek}\n\n=Událostmi řízené systémy=\n\'\'\'Samotné přijetí informace počítačem od člověka je realizováno konečným automatem.\'\'\'\n\n[[Soubor:Automat_klavesnice.png]]\n\nZjednodušeně: po stisknutí a uvolnění tlačítka se něco stane. (dělali jsme na cviku)\n\nVšechny moderní systémy jsou řízené událostmi.\n\nU MS Windows jsou události reprezentovány zprávami.\n\nZprávy jsou „zasílány“ voláním specializovaných funkcím exportovaných prvky \nrozhraní (typicky okny).\n\nZasílají se zprávy v takovéto podobě (vše pro myš):\n\n• WM_MOUSEACTIVATE\n\n• WM_NCMOUSEMOVE\n\n• WM_xBUTTONDBLCLK\n\n• WM_xBUTTONDOWN\n\n• WM_xBUTTONUP\n\n\n\'\'\'Implementace „Místem v programu“ \'\'\'\n\n• Jednoduché a „přirozené“ \n\n• Těžko modifikovatelné pro další klávesy (musí se přidat do dlouhého textu) \n\n• Těžko rozšiřitelné (více vstupních řádků)\n\n\n\'\'\'Implementace „Stavovou proměnnou“\'\'\' \n\n• Obtížnější (automat je explicitně součástí návrhu) \n\n• Lépe modifikovatelné pro další klávesy (dlouhý text, ale přehledné) \n\n• Lehce rozšiřitelné na více vstupních řádků – vytvoří se jen více instancí dat\n\n=Standardní prvky rozhraní=\n\n# Okna \n# Dialboxy \n# Dialogy \n# Typy prvků \n # Tlačítko \n # Nápis a editační řádek \n # Rádiová tlačítka \n # Zatržítko \n # Seznam \n # Seznam s řádkem \n\n[[Soubor:Prvky_w_okna.png]]\n\n=Periferní zařízení=\n\n\'\'\'\'\'//Pravděpodobně již není nutně v rámci otázky.\'\'\'\'\'\n\nPočítač se vyjadřuje pomocí PZ (viz [[5 Vestavěné systémy]] )\n\nDo skupiny periferních zařízení s přímým vlivem na komunikaci patří\nzejména:\n# Displeje - pro výstup obrazu\n# Polohovací zařízení - pro vstup souřadnic\n# Klávesnice - pro vstup textu a řízení počítače\n# Zařízení pro vstup a výstup zvuku\n# Specializovaná vstupní/výstupní zařízení\nMezi zařízení, která nemají přímý vliv na komunikaci patří zejména:\n# Tiskárny\n# Zařízení pro snímání obrazu\n# Součásti, které neumožňují komunikaci (např. rozšíření paměti,\ndisky...)\n\n\'\'\'Displaye\'\'\'\n# CRT\n# Displej s kapalnými krystaly (LCD, nevýhoda mezer kvůli sběrnicím)\n# Plazmový displej\n# LED\n# Projektor obrazu\n\n\'\'\'Projetory\'\'\'\n# CRT (nemusí se chladit, má tři \"oči\", veliká svítivost - až radioaktivní)\n[[Soubor:Crt_projektor.gif]]\n# LCD (klasika ze zasedaček)\n# DLP (dražší, zrcátka, rotující barevný kotouč)\n\n\'\'\'Polohovací zařízení\'\'\'\n# Myš\n# Doteková obrazovka\n\n## Rezistentní: Několik vrstev, z toho dvě elektricky vodivé, dotýkají se navzájem\n \n## Kapacitní: Jako druhý vodivý prvek využívají člověka \n\n# Grafický tablet','utf-8'),(761,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 31\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14 (15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(762,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 31\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14 (15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(763,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(764,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(765,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Křivka===\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(766,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\nhttp://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs\n\nKarel: http://wiki.koranda.net/doku.php?id=szz\n\nPirozek: https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 31\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14 (15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'); INSERT INTO `text` VALUES (767,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 31\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14 (15, 16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(768,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\nFourierova rada:\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\nFourierova transformace:\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\nFourierova trans. s diskretnim casem (DTFT):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\nDiskretni Fourierova rada\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\nDiskretni Fourierova transformace:\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(769,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(770,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nČíslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\nDiferenční rovnice \nIimpulsní odezva \nPřenosová funkce \nFrekvenční charakteristika','utf-8'),(771,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\nDiferenční rovnice \nIimpulsní odezva \nPřenosová funkce \nFrekvenční charakteristika','utf-8'),(772,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\nDiferenční rovnice \nIimpulsní odezva \nPřenosová funkce \nFrekvenční charakteristika\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n• jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n• jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty\na).\n\n• co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n• jak schema zapsat diferencni rovnici.\n\n• jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou\nkonstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se\nvyjadrit pomoci z^{-neco}\n\n• jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu\nB(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n• jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh.\nfrekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv.\ncharakteristika cisl. filtru periodicka s Fs\n\n• velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim\ncitatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi\nlidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi\ndalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(773,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\nDiferenční rovnice \nIimpulsní odezva \nPřenosová funkce \nFrekvenční charakteristika\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty\na).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou\nkonstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se\nvyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu\nB(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh.\nfrekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv.\ncharakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim\ncitatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi\nlidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi\ndalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(774,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\nDiferenční rovnice \nIimpulsní odezva \nPřenosová funkce \nFrekvenční charakteristika\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu\nB(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(775,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\nDiferenční rovnice \nIimpulsní odezva \nPřenosová funkce \nFrekvenční charakteristika\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(776,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n==Diferenční rovnice==\n==Impulsní odezva==\n==Přenosová funkce==\n==Frekvenční charakteristika==\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(777,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n==Diferenční rovnice==\n==Impulsní odezva==\n==Přenosová funkce==\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nSe spočítá tak, že v označení filtru H(z) nahradíme za <m> H(e^{j omega}) </m>\n\n<m> H(e^{j omega}) = {sum{k=0}{Q}{b_k e^{-j omega k}}}/{1 + sum{k=1}{P}{a_k e^{-j omega k}} </m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(778,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n==Diferenční rovnice==\n==Impulsní odezva==\n==Přenosová funkce==\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nSe spočítá tak, že v označení filtru H(z) nahradíme za <m> H(e^{j omega}) </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / 1+sum{k=1}{P}{a_k e^{-j omega k}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(779,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n==Diferenční rovnice==\n==Impulsní odezva==\n==Přenosová funkce==\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(780,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n=Obecně=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n==Diferenční rovnice==\n==Impulsní odezva==\n==Přenosová funkce==\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(781,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n=Obecně=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\n==Přenosová funkce==\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(782,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(783,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(784,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků)\n=Obecně=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(785,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků)\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(786,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(787,'','utf-8'),(788,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(789,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(790,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> detla_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(791,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\nKdyž spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(792,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\nKdyž spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(793,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stebilní - výstup je omezený když je omezený vstup.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(794,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stebilní - výstup je omezený když je omezený vstup.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(795,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(796,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\n\'\'Musíme vědět?\'\'\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(797,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\n\'\'Musíme vědět?\'\'\n\n===Diskrétní LTI systémy===\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(798,'','utf-8'),(799,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\n\'\'Musíme vědět?\'\'\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\n[[Soubor:FIRIIR.png]]\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(800,'','utf-8'),(801,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\n\'\'Musíme vědět?\'\'\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(802,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\n\'\'Musíme vědět?\'\'\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace===\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(803,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace===\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(804,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace====\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(805,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace====\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne.\n\nMartin Hyrš:\n\npřenosová funkce H(z) se získá z rovnic filtru, a funguje pro každé komplexní číslo. Když jí nakrmíš frekvence z jednotkové kružnice, získáš frekvenční charakteristiku filtru -- to je to, co nás u filtru zajímá. Jinak je to ten proces, kdy motorovou pilou vyřízneš kolečko z komplexních Krkonoš.\n\nH(z) žere jakékoliv komplexní číslo, mě ale zajímají jen skutečné frekvence, ktreré leží na jednotkové kružnici. Takže z celé komplexní funkce H(z) si vyříznu jen to kolečko podél jednotkové kružnice a z toho si nakrelím ten graf frekvence/zisk_filtru a to mi ukáže, které frekvence filtr zesílí a které utlumí\na kreslí se to pomocí nul a pólů podle toho, jak jsou daleko od kružnice.\n\npointa kreslení je ta, že nula ve jmenovateli vyrábí nekonečno, které hodnotu na blízké části kružnice vytáhne hodně vysoko myšleno nula jako číslo, ne nula jako nula filtru a ta nula jako číslo se vyrábí tak, že hodnota \'z\' se kterou se procházíš podél kružnice je stejná jako příslušný pól, od kterého se odčítá.\n\n==Frekvenční charakteristika==\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(806,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace====\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne.\n\nMartin Hyrš:\n\npřenosová funkce H(z) se získá z rovnic filtru, a funguje pro každé komplexní číslo. Když jí nakrmíš frekvence z jednotkové kružnice, získáš frekvenční charakteristiku filtru -- to je to, co nás u filtru zajímá. Jinak je to ten proces, kdy motorovou pilou vyřízneš kolečko z komplexních Krkonoš.\n\nH(z) žere jakékoliv komplexní číslo, mě ale zajímají jen skutečné frekvence, ktreré leží na jednotkové kružnici. Takže z celé komplexní funkce H(z) si vyříznu jen to kolečko podél jednotkové kružnice a z toho si nakrelím ten graf frekvence/zisk_filtru a to mi ukáže, které frekvence filtr zesílí a které utlumí\na kreslí se to pomocí nul a pólů podle toho, jak jsou daleko od kružnice.\n\npointa kreslení je ta, že nula ve jmenovateli vyrábí nekonečno, které hodnotu na blízké části kružnice vytáhne hodně vysoko myšleno nula jako číslo, ne nula jako nula filtru a ta nula jako číslo se vyrábí tak, že hodnota \'z\' se kterou se procházíš podél kružnice je stejná jako příslušný pól, od kterého se odčítá.\n\n==Frekvenční charakteristika==\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/disk_syst/disk_syst.pdf str 23\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(807,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/spoj_syst/spoj_syst.pdf str 18\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace====\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne.\n\nMartin Hyrš:\n\npřenosová funkce H(z) se získá z rovnic filtru, a funguje pro každé komplexní číslo. Když jí nakrmíš frekvence z jednotkové kružnice, získáš frekvenční charakteristiku filtru -- to je to, co nás u filtru zajímá. Jinak je to ten proces, kdy motorovou pilou vyřízneš kolečko z komplexních Krkonoš.\n\nH(z) žere jakékoliv komplexní číslo, mě ale zajímají jen skutečné frekvence, ktreré leží na jednotkové kružnici. Takže z celé komplexní funkce H(z) si vyříznu jen to kolečko podél jednotkové kružnice a z toho si nakrelím ten graf frekvence/zisk_filtru a to mi ukáže, které frekvence filtr zesílí a které utlumí\na kreslí se to pomocí nul a pólů podle toho, jak jsou daleko od kružnice.\n\npointa kreslení je ta, že nula ve jmenovateli vyrábí nekonečno, které hodnotu na blízké části kružnice vytáhne hodně vysoko myšleno nula jako číslo, ne nula jako nula filtru a ta nula jako číslo se vyrábí tak, že hodnota \'z\' se kterou se procházíš podél kružnice je stejná jako příslušný pól, od kterého se odčítá.\n\n==Frekvenční charakteristika==\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/disk_syst/disk_syst.pdf str 23\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(808,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 04, 05, 06, 07, 08, 09, 10, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16, 31\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(809,'','utf-8'),(810,'=Množiny=\n==Operace==\nSjednocení\nPrůnik\nRozdíl\nSymetrický rozdíl\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n=Relace=\n=Zobrazení=','utf-8'),(811,'=Množiny=\n==Operace==\n\'\'\'Sjednocení\n\nPrůnik\n\nRozdíl\n\nSymetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n=Relace=\n=Zobrazení=','utf-8'),(812,'=Množiny=\n==Operace==\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n=Relace=\n=Zobrazení=','utf-8'),(813,'=Množiny=\n==Operace==\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n==Velikost==\n\n=Relace=\n=Zobrazení=','utf-8'),(814,'=Množiny=\n==Operace==\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. Spočetné\njsou všechny množiny se stejnou mohutností, jako množina přirozených čísel.\nOstatní jsou nespočetné.\n\n=Relace=\n=Zobrazení=','utf-8'),(815,'=Množiny=\n==Operace==\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. Spočetné jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel.\nOstatní jsou nespočetné.\n\n=Relace=\n=Zobrazení=','utf-8'),(816,'=Množiny=\n==Operace==\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. Spočetné jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou nespočetné.\n\n=Relace=\n=Zobrazení=','utf-8'),(817,'Paměťová hierarchie - co, proč, jak.\ntypy paměti - \n# vnitřní\n# hlavní\n# vnější\n\nparametry pamětí\n# kapacita\n# přístupová doba\n# doba cyklu\n# přenosová rychlost\n# výkonnost\n# chybovost/poruchovost\n# cena/bit\n\npaměti podle fyzikálního principu:\n# polovodičové\n# magnetické\n# magnetooptické\n# optické\n\npřístup k datům:\n# libovolný přístup (ram)\n# sériový přístup (sam)\n# smíšený přístup\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(818,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Následující schůzka bude ve středa 6.3. u Suave!\'\'\'\n\n\'\'\'Schůzky\'\'\': datum(místo,pořadí,otázky) \n \n\'\'už proběhlo\'\': 13.2.(K,SAK,11-39-27), 20.2.(S,KAS,29-38-12), 1.3.(K,ASK,40-30)\n \n\'\'zbývá\'\': 6.3.(S,SKA), 13.3.(K,KSA), 20.3.(S,AKS), 27.3.(K,SAK), 3.4.(S,KAS), 10.4.(K,ASK), 17.4.(S,SKA), 24.4.(K,KSA), 1.5.(S,AKS), 8.5.(K), 15.5.(S)\n\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16, 31, 04\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 11, 12, 13, 14, 27, 29, 30, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30 (10, 18, 26, 28, 31, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(819,'== JAZYK UML ==\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW) \n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\nDATOVÝ POHLED (DATA VIEW) \n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n---\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n• Vztahy:\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n4) ZOBECNĚNÍ (generalization) - dědičnost\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n• Diagram komponent (component diagram)\n• Diagram nasazení (deployment diagram)\n• (Profile Diagram)\n• (Composite Structure Diagram)\n• (Package Diagram)\n\n---\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n• Diagram znázorňuje:\n1) hranice navrhovaného/zkoumaného systému\n2) účastníky analyzovaných případů užití\n3) analyzované případy užití\n4) interakce mezi aktéry a případy užití\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n• Pro konkretizaci (specifikaci) případu užití. \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n• Příklady:\nNázev Případ užití: Platit daň z přidané hodnoty\nIdentifikátor ID: UC1\nÚčastníci Účastníci:\nČas\nFinanční úřad\nStav před Vstupní podmínky:\n1. Je konec fiskálního čtvrtletí?\nKroky Tok událostí:\n1. Případ užití začíná na konci fiskálního čtvrtletí.\n2. Systém určuje výši daně z přidané hodnoty, kterou je třeba odvést státu.\n3. Systém odesílá elektronickou platbu finančnímu úřadu.\nStav po Následné podmínky:\n1. Finanční úřad přijímá daň z přidané hodnoty ve správné výši.\n\nNázev Případ užití: Zobrazit košík\nIdentifikátor ID: UC2\nÚčastníci Účastníci: Zákazník\nStav před Vstupní podmínky:\n1. Zákazník je přihlášen do systému.\nKroky Tok událostí:\n1. Případ užití začíná volbou \"zobrazit obsah košíku\".\n2. KDYŽ je košík prázdný:\n 2.1 Systém oznámí Zákazníkovi, že košík neobsahuje žádné položky.\n 2.2 Případ užití končí.\n3. Systém zobrazí seznam všech položek v nákupním košíku zákazníka včetně ID, názvu, množství a ceny každé položky.\nStav po Následné podmínky: …\n Alternativní tok 1:\n1. Zákazník může kdykoliv opustit obrazovku košíku.\n Následné podmínky: …\n Alternativní tok 2:\n1. Zákazník může kdykoliv opustit systém.\n Následné podmínky: …\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. ¨\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n• (State Machine Diagram)\n• (Interaction Overview Diagram)\n• (Timing Diagram)\n== ER DIAGRAM ==\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n• Je zaměřený na data systému.\n• Více v otázce 33.','utf-8'),(820,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW) \n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\nDATOVÝ POHLED (DATA VIEW) \n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n---\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n• Vztahy:\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n4) ZOBECNĚNÍ (generalization) - dědičnost\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n• Diagram komponent (component diagram)\n• Diagram nasazení (deployment diagram)\n• (Profile Diagram)\n• (Composite Structure Diagram)\n• (Package Diagram)\n\n---\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n• Diagram znázorňuje:\n1) hranice navrhovaného/zkoumaného systému\n2) účastníky analyzovaných případů užití\n3) analyzované případy užití\n4) interakce mezi aktéry a případy užití\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n• Pro konkretizaci (specifikaci) případu užití. \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n• Příklady:\nNázev Případ užití: Platit daň z přidané hodnoty\nIdentifikátor ID: UC1\nÚčastníci Účastníci:\nČas\nFinanční úřad\nStav před Vstupní podmínky:\n1. Je konec fiskálního čtvrtletí?\nKroky Tok událostí:\n1. Případ užití začíná na konci fiskálního čtvrtletí.\n2. Systém určuje výši daně z přidané hodnoty, kterou je třeba odvést státu.\n3. Systém odesílá elektronickou platbu finančnímu úřadu.\nStav po Následné podmínky:\n1. Finanční úřad přijímá daň z přidané hodnoty ve správné výši.\n\nNázev Případ užití: Zobrazit košík\nIdentifikátor ID: UC2\nÚčastníci Účastníci: Zákazník\nStav před Vstupní podmínky:\n1. Zákazník je přihlášen do systému.\nKroky Tok událostí:\n1. Případ užití začíná volbou \"zobrazit obsah košíku\".\n2. KDYŽ je košík prázdný:\n 2.1 Systém oznámí Zákazníkovi, že košík neobsahuje žádné položky.\n 2.2 Případ užití končí.\n3. Systém zobrazí seznam všech položek v nákupním košíku zákazníka včetně ID, názvu, množství a ceny každé položky.\nStav po Následné podmínky: …\n Alternativní tok 1:\n1. Zákazník může kdykoliv opustit obrazovku košíku.\n Následné podmínky: …\n Alternativní tok 2:\n1. Zákazník může kdykoliv opustit systém.\n Následné podmínky: …\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. ¨\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n• (State Machine Diagram)\n• (Interaction Overview Diagram)\n• (Timing Diagram)\n== ER DIAGRAM ==\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n• Je zaměřený na data systému.\n• Více v otázce 33.','utf-8'),(821,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n---\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n---\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\nNázev Případ užití: Platit daň z přidané hodnoty\n\nIdentifikátor ID: UC1\n\nÚčastníci Účastníci:\n\nČas\n\nFinanční úřad\n\nStav před Vstupní podmínky:\n\n1. Je konec fiskálního čtvrtletí?\n\nKroky Tok událostí:\n\n1. Případ užití začíná na konci fiskálního čtvrtletí.\n\n2. Systém určuje výši daně z přidané hodnoty, kterou je třeba odvést státu.\n\n3. Systém odesílá elektronickou platbu finančnímu úřadu.\n\nStav po Následné podmínky:\n\n1. Finanční úřad přijímá daň z přidané hodnoty ve správné výši.\n\nNázev Případ užití: Zobrazit košík\n\nIdentifikátor ID: UC2\n\nÚčastníci Účastníci: Zákazník\n\nStav před Vstupní podmínky:\n\n1. Zákazník je přihlášen do systému.\n\nKroky Tok událostí:\n\n1. Případ užití začíná volbou \"zobrazit obsah košíku\".\n\n2. KDYŽ je košík prázdný:\n\n A Systém oznámí Zákazníkovi, že košík neobsahuje žádné položky.\n\n B Případ užití končí.\n\n3. Systém zobrazí seznam všech položek v nákupním košíku zákazníka včetně ID, názvu, množství a ceny každé položky.\n\nStav po Následné podmínky: …\n\n Alternativní tok 1:\n\n1. Zákazník může kdykoliv opustit obrazovku košíku.\n\n Následné podmínky: …\n\n Alternativní tok 2:\n\n1. Zákazník může kdykoliv opustit systém.\n\n Následné podmínky: …\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.','utf-8'),(822,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.','utf-8'),(823,'','utf-8'),(824,'','utf-8'),(825,'','utf-8'),(826,'','utf-8'),(827,'','utf-8'),(828,'','utf-8'),(829,'','utf-8'),(830,'','utf-8'),(831,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.','utf-8'),(832,'','utf-8'),(833,'','utf-8'),(834,'','utf-8'),(835,'','utf-8'),(836,'','utf-8'),(837,'','utf-8'),(838,'','utf-8'),(839,'','utf-8'),(840,'','utf-8'),(841,'','utf-8'),(842,'','utf-8'),(843,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16, 04, 18\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 12, 13, 14, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30, 31 (10, 18, 26, 28, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(844,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16, 04, 18\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 12, 13, 14, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30, 31 (10, 18, 26, 28, 32, 33, 34, 35, 37)\n\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(845,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(846,'','utf-8'),(847,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího\n\n\n== Složitost, velikost a čas ==\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(848,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n==== Časová složitost algoritmů ====\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího\n\n\n== Složitost, velikost a čas ==\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(849,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n==== Časová složitost algoritmů ====\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího\n\n\n==== Složitost, velikost a čas ====\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(850,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n==== Časová složitost algoritmů ====\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího\n\n----\n\n==== Složitost, velikost a čas ====\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(851,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\nHledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nHeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\nSelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\nAlgoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\nProblém obchodního cestujícího\n\n----\n\n==== Složitost, velikost a čas ====\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(852,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(853,'','utf-8'),(854,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(855,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16, 04, 18\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 12, 13, 14, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02 ,03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n27, 29, 30, 31 (10, 18, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(856,'=Množiny=\n==Operace==\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. Spočetné jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou nespočetné.\n\n=Relace=\n=Zobrazení=','utf-8'),(857,'','utf-8'),(858,'=Množiny=\n==Operace==\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n[[Soubor:Zakony.png]]\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. Spočetné jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou nespočetné.\n\n=Relace=\n=Zobrazení=','utf-8'),(859,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\'\'\'\nPotenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2n prvků.\n\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n=Zobrazení=','utf-8'),(860,'','utf-8'),(861,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2n prvků.\n\n\'\'\'Třídy rozkladu\'\'\':\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n=Zobrazení=','utf-8'),(862,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\':\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n=Zobrazení=','utf-8'),(863,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\':\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n=Zobrazení=','utf-8'),(864,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n=Zobrazení=','utf-8'),(865,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\nparametry pamětí\n# kapacita\n# přístupová doba\n# doba cyklu\n# přenosová rychlost\n# výkonnost\n# chybovost/poruchovost\n# cena/bit\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# vnější paměť\n\nV našich slajdech je tam navíc ještě hlavní paměť, ale tu nenajdete v tomto rozdělení nikde jinde kromě nich. Ale prý je toho součástí rychlá vyrovnávací paměť.\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Vnitřní paměť je zpravidla volatilní (nestálá) a po vypnutí počítače se její obsah ztrácí. Vnitřní pamětí se v architektuře počítače označuje paměť určená pro uložení strojového kódu běžících procesů a pro data těmito procesy právě zpracovávaná.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nSoučástí hlavní pamětí bývají i rychlé vyrovnávací paměti. Jsu to paměti osazené většinou na základní desce. Bývají realizovány pomocí polovodičových součástek. Jsou do nich zaváděny práve spouštěné programy nebo jejich části a data, se kterými pracují\n\npaměti podle fyzikálního principu:\n# polovodičové\n# magnetické\n# magnetooptické\n# optické\n\npřístup k datům:\n# libovolný přístup (ram)\n# sériový přístup (sam)\n# smíšený přístup\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(866,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\nparametry pamětí\n# kapacita\n# přístupová doba\n# doba cyklu\n# přenosová rychlost\n# výkonnost\n# chybovost/poruchovost\n# cena/bit\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\npaměti podle fyzikálního principu:\n# polovodičové\n# magnetické\n# magnetooptické\n# optické\n\npřístup k datům:\n# libovolný přístup (ram)\n# sériový přístup (sam)\n# smíšený přístup\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(867,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\npaměti podle fyzikálního principu:\n# polovodičové\n# magnetické\n# magnetooptické\n# optické\n\npřístup k datům:\n# libovolný přístup (ram)\n# sériový přístup (sam)\n# smíšený přístup\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(868,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n=====Podle fyzikálního principu=====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\npřístup k datům:\n# libovolný přístup (ram)\n# sériový přístup (sam)\n# smíšený přístup\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(869,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n\n----\n\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n=====Podle fyzikálního principu=====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n=====Podle přístupu k datům=====\n\n# libovolný přístup (ram)\n# sériový přístup (sam)\n# smíšený přístup\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(870,'','utf-8'),(871,'','utf-8'),(872,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n\n----\n\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n=====Podle fyzikálního principu=====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n=====Podle přístupu k datům=====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(873,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n\n----\n\n\n=====Podle určení=====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n=====Podle fyzikálního principu=====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n=====Podle přístupu k datům=====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\nDoba uchování informace:\n# statické\n# dynamické','utf-8'),(874,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\nměnitelnost obsahu paměti:\n# R/W\n# ROM - read only\n## PROM\n## EPROM\n## EEPROM\n\n----\n\n\n====Podle stálosti obsahu paměti====\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\n----\n\n\n====Podle doby uchování informace====\nDoba uchování informace:\n# statické\n# dynamické\n\n----','utf-8'),(875,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = (3,14)10\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\nPOLYNOMIÁLNÍ ZÁPIS\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n10 2 8 16\n\n0 0000 0 0\n\n1 0001 1 1\n\n2 0010 2 2\n\n3 0011 3 3\n\n4 0100 4 4\n\n5 0101 5 5\n\n6 0110 6 6\n\n7 0111 7 7\n\n8 1000 10 8\n\n9 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\nTABULKA HODNOT\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(876,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = (3,14)10\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\nPOLYNOMIÁLNÍ ZÁPIS\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n10 2 8 16\n\n00 0000 00 0\n\n01 0001 01 1\n\n02 0010 02 2\n\n03 0011 03 3\n\n04 0100 04 4\n\n05 0101 05 5\n\n06 0110 06 6\n\n07 0111 07 7\n\n08 1000 10 8\n\n09 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\nTABULKA HODNOT\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(877,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = (3,14)10\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\nPOLYNOMIÁLNÍ ZÁPIS\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n10 2 8 16\n\n00 0000 00 0\n\n01 0001 01 1\n\n02 0010 02 2\n\n03 0011 03 3\n\n04 0100 04 4\n\n05 0101 05 5\n\n06 0110 06 6\n\n07 0111 07 7\n\n08 1000 10 8\n\n09 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(878,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = (3,14)10\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n10 2 8 16\n\n00 0000 00 0\n\n01 0001 01 1\n\n02 0010 02 2\n\n03 0011 03 3\n\n04 0100 04 4\n\n05 0101 05 5\n\n06 0110 06 6\n\n07 0111 07 7\n\n08 1000 10 8\n\n09 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(879,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16, 04\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 12, 13, 14, 18, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03 (04, 05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(880,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\nStálost obsahu paměti:\n# volatilní\n# nevolatilní\n\n# destruktivní\n\n----\n\n\n====Podle doby uchování informace====\nDoba uchování informace:\n# statické\n# dynamické\n\n----','utf-8'),(881,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\nDoba uchování informace:\n# statické\n# dynamické\n\n----','utf-8'),(882,'','utf-8'),(883,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----','utf-8'),(884,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===','utf-8'),(885,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===\nRVP je rychlá SRAM umístěná mezi CPU a hlavní pamětí. Je rozdělena do bloků s konstantní velikostí. Počet bloků je různý, např. vyrovnávací paměť o kapacitě 512 kB a velikosti bloku 32 bytů obsahuje celkem 16384 bloků. Hlavní paměť je rozdělena na bloky o stejné velikosti, Těch bloků je však mnohem více, než bloků ve vyrovnávací paměti --> ne všchny bloky v operační paměti mohou být v RVP.\n\nRVP (cache) využívá principy prostorové i časové lokality. Jejím cílem je odstranění výkonnostných rozdílů mezi procesorem a hlavní pamětí. Cache obsahuje kopie dat v hlavní paměti, která jsou používána (disk obsahuje všechna data, hlavní paměř obsahuje kopie používaných dat z disku).','utf-8'),(886,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===\nRVP je rychlá SRAM umístěná mezi CPU a hlavní pamětí. Je rozdělena do bloků s konstantní velikostí. Počet bloků je různý, např. vyrovnávací paměť o kapacitě 512 kB a velikosti bloku 32 bytů obsahuje celkem 16384 bloků. Hlavní paměť je rozdělena na bloky o stejné velikosti, Těch bloků je však mnohem více, než bloků ve vyrovnávací paměti --> ne všchny bloky v operační paměti mohou být v RVP.\n\nRVP (cache) využívá principy prostorové i časové lokality. Jejím cílem je odstranění výkonnostných rozdílů mezi procesorem a hlavní pamětí. Cache obsahuje kopie dat v hlavní paměti, která jsou používána (disk obsahuje všechna data, hlavní paměř obsahuje kopie používaných dat z disku).\n\nPaměť cache je založena na poznatku, že programy obvykle nesahají do operační paměti nesystematicky, ba právě naopak - po určitou dobu pracují vždy jen s relativně malým úsekem paměti. Toho se využívá a přenese se obsah tohoto úseku do zvlástní paměti o menší kapacitě, která je zařazená mezi procesor a vlastní operační paměť, a která je dostatečně rychlá. Když má procesor \"stěstí\", najde požadovaná data v této malé paměti, a dostane je tudíž s takovou rychlostí, jakou potřebuje. Jinak musí sáhnout do pomalejší operační paměti. Trvá to trochu déle, proto ze načítá celý větší blok dat, protože s vysokou pravděpodobností procesor (nebo právě prováděný program) bude potřebovat ještě neco z tohoto bloku.\n\nRVP má výrazně menší kapacitu než DRAM. Je realizována jako paměť SRAM, je rychlejší --> je možno komunikovat bez čekacích stavů. Cena/bit vyšší, hustota menší (složitější paměťový prvek), vyšší příkon.','utf-8'),(887,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod (který má výstup 0 nebo 1). Statická paměť obsahuje pro každý bit své kapacity takový klopný obvod + ovládací logiku, která vyhodnocuje adresní a další signály přicházejících po jednotlivých vývodech.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky. Tyto kondenzátorky jsou umístěny ve čtvercové matici, a počet adresních vodičů je snižen na polovinu jinak potěbného počtu.\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===\nRVP je rychlá SRAM umístěná mezi CPU a hlavní pamětí. Je rozdělena do bloků s konstantní velikostí. Počet bloků je různý, např. vyrovnávací paměť o kapacitě 512 kB a velikosti bloku 32 bytů obsahuje celkem 16384 bloků. Hlavní paměť je rozdělena na bloky o stejné velikosti, Těch bloků je však mnohem více, než bloků ve vyrovnávací paměti --> ne všchny bloky v operační paměti mohou být v RVP.\n\nRVP (cache) využívá principy prostorové i časové lokality. Jejím cílem je odstranění výkonnostných rozdílů mezi procesorem a hlavní pamětí. Cache obsahuje kopie dat v hlavní paměti, která jsou používána (disk obsahuje všechna data, hlavní paměř obsahuje kopie používaných dat z disku).\n\nPaměť cache je založena na poznatku, že programy obvykle nesahají do operační paměti nesystematicky, ba právě naopak - po určitou dobu pracují vždy jen s relativně malým úsekem paměti. Toho se využívá a přenese se obsah tohoto úseku do zvlástní paměti o menší kapacitě, která je zařazená mezi procesor a vlastní operační paměť, a která je dostatečně rychlá. Když má procesor \"stěstí\", najde požadovaná data v této malé paměti, a dostane je tudíž s takovou rychlostí, jakou potřebuje. Jinak musí sáhnout do pomalejší operační paměti. Trvá to trochu déle, proto ze načítá celý větší blok dat, protože s vysokou pravděpodobností procesor (nebo právě prováděný program) bude potřebovat ještě neco z tohoto bloku.\n\nRVP má výrazně menší kapacitu než DRAM. Je realizována jako paměť SRAM, je rychlejší --> je možno komunikovat bez čekacích stavů. Cena/bit vyšší, hustota menší (složitější paměťový prvek), vyšší příkon.','utf-8'),(888,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod (který má výstup 0 nebo 1). Statická paměť obsahuje pro každý bit své kapacity takový klopný obvod + ovládací logiku, která vyhodnocuje adresní a další signály přicházejících po jednotlivých vývodech.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky. Tyto kondenzátorky jsou umístěny ve čtvercové matici, a počet adresních vodičů je snižen na polovinu jinak potěbného počtu.\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===\nRVP je rychlá SRAM umístěná mezi CPU a hlavní pamětí. Je rozdělena do bloků s konstantní velikostí. Počet bloků je různý, např. vyrovnávací paměť o kapacitě 512 kB a velikosti bloku 32 bytů obsahuje celkem 16384 bloků. Hlavní paměť je rozdělena na bloky o stejné velikosti, Těch bloků je však mnohem více, než bloků ve vyrovnávací paměti --> ne všchny bloky v operační paměti mohou být v RVP.\n\nRVP (cache) využívá principy prostorové i časové lokality. Jejím cílem je odstranění výkonnostných rozdílů mezi procesorem a hlavní pamětí. Cache obsahuje kopie dat v hlavní paměti, která jsou používána (disk obsahuje všechna data, hlavní paměř obsahuje kopie používaných dat z disku).\n\nPaměť cache je založena na poznatku, že programy obvykle nesahají do operační paměti nesystematicky, ba právě naopak - po určitou dobu pracují vždy jen s relativně malým úsekem paměti. Toho se využívá a přenese se obsah tohoto úseku do zvlástní paměti o menší kapacitě, která je zařazená mezi procesor a vlastní operační paměť, a která je dostatečně rychlá. Když má procesor \"stěstí\", najde požadovaná data v této malé paměti, a dostane je tudíž s takovou rychlostí, jakou potřebuje. Jinak musí sáhnout do pomalejší operační paměti. Trvá to trochu déle, proto ze načítá celý větší blok dat, protože s vysokou pravděpodobností procesor (nebo právě prováděný program) bude potřebovat ještě neco z tohoto bloku.\n\nRVP má výrazně menší kapacitu než DRAM. Je realizována jako paměť SRAM, je rychlejší --> je možno komunikovat bez čekacích stavů. Cena/bit vyšší, hustota menší (složitější paměťový prvek), vyšší příkon.\n\nSnaha o integraci RVP do pocesoru - Cache L1, L2 a L3\n\n======L1 Cache======\n\n\n======L2 Cache======\n======L3 Cahce======','utf-8'),(889,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod (který má výstup 0 nebo 1). Statická paměť obsahuje pro každý bit své kapacity takový klopný obvod + ovládací logiku, která vyhodnocuje adresní a další signály přicházejících po jednotlivých vývodech.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky. Tyto kondenzátorky jsou umístěny ve čtvercové matici, a počet adresních vodičů je snižen na polovinu jinak potěbného počtu.\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===\nRVP je rychlá SRAM umístěná mezi CPU a hlavní pamětí. Je rozdělena do bloků s konstantní velikostí. Počet bloků je různý, např. vyrovnávací paměť o kapacitě 512 kB a velikosti bloku 32 bytů obsahuje celkem 16384 bloků. Hlavní paměť je rozdělena na bloky o stejné velikosti, Těch bloků je však mnohem více, než bloků ve vyrovnávací paměti --> ne všchny bloky v operační paměti mohou být v RVP.\n\nRVP (cache) využívá principy prostorové i časové lokality. Jejím cílem je odstranění výkonnostných rozdílů mezi procesorem a hlavní pamětí. Cache obsahuje kopie dat v hlavní paměti, která jsou používána (disk obsahuje všechna data, hlavní paměř obsahuje kopie používaných dat z disku).\n\nPaměť cache je založena na poznatku, že programy obvykle nesahají do operační paměti nesystematicky, ba právě naopak - po určitou dobu pracují vždy jen s relativně malým úsekem paměti. Toho se využívá a přenese se obsah tohoto úseku do zvlástní paměti o menší kapacitě, která je zařazená mezi procesor a vlastní operační paměť, a která je dostatečně rychlá. Když má procesor \"stěstí\", najde požadovaná data v této malé paměti, a dostane je tudíž s takovou rychlostí, jakou potřebuje. Jinak musí sáhnout do pomalejší operační paměti. Trvá to trochu déle, proto ze načítá celý větší blok dat, protože s vysokou pravděpodobností procesor (nebo právě prováděný program) bude potřebovat ještě neco z tohoto bloku.\n\nRVP má výrazně menší kapacitu než DRAM. Je realizována jako paměť SRAM, je rychlejší --> je možno komunikovat bez čekacích stavů. Cena/bit vyšší, hustota menší (složitější paměťový prvek), vyšší příkon.\n\nSnaha o integraci RVP do pocesoru - Cache L1, L2 a L3\n\n======L1 Cache======\nZvaná také interní, nebo primární. Slouží k vyrovnání rychlosti velmi výkonných procesorů a pomalejších pamětí. Tento typ cache paměti je integrován přmo na čipu procesoru a je také realizován pomocí SRAM. Takovýto procesor (který má L1 cache) musí mít v sobě integrován také řadič interní cache pro řízení její rychlosti.\n\n======L2 Cache======\nExterní, sekundární. Byla vytvorena jako první, je umístěna mezi procesorem a operační pamětí. Původně externí paměť byla osazena na základní desce počítače, od procesorů Pentium Pro a Pentium II je rovněž integrována v pouzdře procesoru.\n\n======L3 Cache======\nPomocná paměť osazená na základní desce, pracující s poloviční frekvencí mikroprocesoru. Pro procesory s více jádry je sdílená pro všechny z nich (L2 bývá sdílena pro dvojici jader). Z cache pamětí je největší a nejpomalejší.\n\n----\n\n\n======Účinnost RVP======\nZákladní údaj o účinnosti RVP je pravděpodobnost úspěchu (\'\'\'hit rate\'\'\'), resp. pravděpodobnost neúspěchu (\'\'\'miss rate\'\'\'), neboli pravděpodobnost výpadku bloku. Tyto parametry mohou být definovány zvlášť pro čtení i zápis, data i instrukce.\nDoba potřebná k nalezení bloku je \'\'\'přístupová doba RVP\'\'\' (pokud blok v RVP je). V případě neúspěchu (blok v RVP není) se přičítá ztrátová doba (\'\'\'miss penalty\'\'\'), což je doba potřebná na přisunutí bloku. Cílem je navrhnout organizaci a správu RVP tak, aby hodnota hit rate byla co nejvyšší (ale závisí i na datech/programech). Obvykle to bývá 95-99%.\n\nVýpadky rozdělujeme podle příčín na:\n# \'\'\'nezbytné\'\'\' - např. po startu systému je RVP prázdná bez ohledu na konstrukci nebo nahrazovací algoritmus\n# \'\'\'kapacitní\'\'\' - způsobené omezenou kapacitou dat RVP, takže nemohou být k dispozici všechny bloky dat a instrukcí\n# \'\'\'konfliktní\'\'\' - závisí na stupni asociativity\n\n----\n\n\n====Organizace vyrovnávací paměti====\n\n======\"Výběr oběti\"======\nJsou-li všecny položky pro daný ukazatel obsazeny, je třeba rozhodnout, kterou položku zrušíme a uvolníme tak místo pro novou položku. U dvoucestné RVP a RVP se stupněm asociativity > 1 vzniá problém výběru oběti.\n\nTento problém řeší některá ze strategií náhrady:\n# \'\'\'Least Recently Used (LRU)\'\'\' - ponechávají se položky používané v poslední době a ruší se nejdéle nepoužitá položka\n# \'\'\'Most Frequently Used (MFU)\'\'\' - ruší nejčastěji použitou položku\n# \'\'\'RAND\'\'\' - náhodný výběr oběti\n# \'\'\'FIFO\'\'\' - oběť je položka,která je v RVP nejdéle','utf-8'),(890,'','utf-8'),(891,'','utf-8'),(892,'=====Paměť=====\nElektronická paměť je součástka, zařízení nebo materiál, který umožní uložit obsah informace (zápis do paměti), uchovat ji po požadovanou dobu a znovu ji získat pro další použití (čtení paměti). Informace je obvykle vyjádřena jako číselná hodnota, nebo je nositelem informace modulovaný analogový signál. Pro své vlastnosti se používá binární (dvojková) číselná soustava, která má pouze dva stavy, které se snadno realizují v elektronických obvodech. Pro uchování informace tedy stačí signál (např. elektrické napětí), který má dva rozlišitelné stavy a není třeba přesně znát velikost signálu.\n\n=====Hierarchie pamětí=====\nPaměťový systém počítače má řadu požadavků (velká kapacita, vysoká rychlost, nízká cena). Tyto požadavky není možné splnit jedním druhem paměti. Proto vznikla hierarchická struktura paměti. Tímto chceme maximalizovat výkonnost počítače (poměr výkon/cena) a potřebujeme na to i nevolatilní paměti, které nepotřebují napájecí napětí.\n\n[[Soubor:Hierarchie.png]]\n\n\'\'\'Čím blíže je pamět v paměťové hierachii k počítači, tím musí být:\'\'\'\n# rychlejší --> vyšší cena za pamatovanou slabiku\n# menší --> lepší poměr cena/výkonnost\n# podmnožinou všech nižších úrovní paměti (obsahuje nejvíce používaná data)\n# obsahuje minimálně všechna data pamětí vyšších úrovní\n\n======Časová lokalita======\nPokud procesor využívá nějakou položku v paměti, je vysoká pravděpodobnost, že ji bude používat znovu --> uložíme položku co nejblíže k procesoru.\n\n======Prostorová lokalita======\nPokud procesor pracuje s nějakou položkou v paměti, potom položky, které jsou umístěny v paměti blízko této položky, budou s vysokou pravděpodobností také použity --> uložíme položky co nejblíže k procesoru.\n\n=====Parametry pamětí=====\n# \'\'\'Kapacita\'\'\' - udává se jako součin počtu paměťových míst s délkou paměťového místa (např. 4k x 4 byty) \n# \'\'\'Přístupová doba\'\'\' - doba od zahájení čtení po získání obsahu paměťového místa\n# \'\'\'Doba cyklu\'\'\' - doba od zahájení čtení nebo zápisu až po skončení této operace, kdy je možno spustit další operaci tohoto typu.\n# \'\'\'Přenosová rychlost\'\'\' - parametr udávající počet datových jednotek (bitů, bytů atd.) přenášených do nebo z paměti za sekundu\n# \'\'\'Výkonnost\'\'\' - u pamětí je udána parametry kapacita, přístupová doba a přenosová rychlost.\n# \'\'\'Chybovost/poruchovost\'\'\'\n# \'\'\'Cena/bit\'\'\'\n\n===Rozdělení pamětí===\nPaměti mají spoustu parametrů a lze je rozdělit z několika hledisek:\n# podle určení/funkce paměti\n# podle fyzikálního principu\n# podle přístupu k datům\n# podle měnitelnosti obsahu paměti\n# podle stálosti obsahu paměti\n# podle doby uchování informace\n\n----\n\n\n====Podle určení====\nPaměťové prvky se používají v počítači v těchto funkcích:\n# vnitřní paměť procesoru\n# hlavní paměť\n# vnější paměť\n\n======Vnitřní paměť procesoru======\nJako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Slouží ke krátkodobému uchování dat a instrukcí, které musí mít počítač (procesor) pohotově k dispozici.\nObsahuje registry, registrové sady, zásobníky, fronty, tabulky pro různé účely a paměř mikroprogramů v řadiči procesoru.\n\n======Hlavní paměť======\nJe propojená přímo s CPU a umožňuje náhodný přístup k datům (Random Access Memory - RAM). CPU využívá RAM jako úložný prostor pro data, výsledky výpočtů a insturkcí a toto skladiště využívá podle potřeby k provádění úloh vyžadovaných programy. Součástí hlavní paměti je cache (rychlá vyrovnávací paměť), a slouží pro odstranění rozdílu výkonu procesor - hlavní paměť.\n\n======Vnější paměť======\nSlouží ke dlouhodobému uchování dat (nevolatilní paměti, obsah se vypnutím počítače neztrácí). K vnější paměti nemá procesor počítače zpravidla přímý přístup. Jsou daleko pomalejší než paměti vnitřní, ale umožňují dlouhodobé uchovávání velkých objemů dat. Vnější paměť můžeme rozdělit na stálou (HDD) a výměnou (diskety, CD, DVD, USB flash...) paměť. \n\n----\n\n\n====Podle fyzikálního principu====\n# \'\'\'polovodičové\'\'\' - bipolární a unipolární MOS resp. CMOS, používané jako registry procesoru, RAM, flashky...\n# \'\'\'magnetické\'\'\' - Používají se u pevných disků, pásků a disket. Bit je uložen jako orientace magnetických pólů.\n# \'\'\'magnetooptické\'\'\'\n# \'\'\'optické\'\'\' - CD, DVD, Blu-ray. Laser se od disku buď odrazí, nebo se rozptýlí.\n\nMnoho typů pamětí zmizelo a další se objevují.\n\n----\n\n\n====Podle přístupu k datům====\n\n# libovolný přístup \n# sériový přístup \n# smíšený přístup\n\n======Libovolný přístup======\nRAM (Random Access Memory) - pokud přístupová doba nezávisí na umístění požadované položky.\n[[Soubor:Ram.png]]\n\n======Sériový přístup======\nPamět se sériovým přístupem SAM (Serial Access Memory) vybavuje položky s různou dobou přístupu podle toho, jak dlouho trvá, než se paměťové médium přisune k čtecí hlavě.\n[[Soubor:Sam.png]]\n\n======Smíšený přístup======\nDisk s několika záznamovými povrchy je reprezentantem smíšeného přístupu - výběr záznamového povrchu je libovolný přístup, vystavování hlavy na požadovanou stopu a otáčení disku při čekání na požadovaný záznamový sektor je sériový přístup. Čistě sériový přístup má magnetiská páska.\n\n----\n\n\n====Podle měnitelnosti obsahu paměti====\n=====Read/Write Memory=====\nPaměť umožňující čtení i zápis.\n=====Read Only Memory=====\npaměť umožňující pouze čtení, zapisovat nelze. Informace jsou do těchto pamětí pevně zapsány při jejich výrobě a potom již není možné žádným způsobem jejich obsah změnit. Jedná se tedy o statickou, energeticky nezávislou paměť určenou pouze ke čtení. Varianty:\n\n======PROM======\nProgramovatelná ROM. Paměť PROM neobsahuje po vyrobení žádnou pevnou informaci a je na uživateli, aby provedl příslušný zápis informace. Tento zápis je možné provést pouze jednou a poté již paměť slouží stejně jako ROM. PROM jsou statické a energeticky nezávislé paměti.\n\n======EPROM======\nVymazatelná PROM. Paměť EPROM je statická energeticky nezávislá paměť, do které může uživatel provést zápis. Zapsané informace je možné vymazat působením ultrafialového záření. Tyto paměti jsou realizovány pomocí speciálních unipolárních tranzistorů, které jsou schopny na svém přechodu udržet elektrický náboj po \ndobu až několika let. Tento náboj lze vymazat právě působením UV záření. \n\n======EEPROM======\nElektricky vymazatelná PROM. Rovněž statická, energeticky nezávislá paměť, kterou je možné naprogramovat a později z ní informace vymazat. Výhodou oproti EPROM je, že vymazání se provádí elektricky a ne pomocí UV záření, takže odpadá nepohodlná manipulace s pamětí při jejím mazání. Je zde řada modifikací podle toho, zda je možné smazat vybraný řádek, nebo pouze celou pamět, příp. jak rychle mazání probíhá.\n\n======Flash-EEPROM======\nPaměti Flash jsou obdobou pamětí EEPROM. Vymazání se provádí elektrickou cestou, jejich přeprogramování je možné provést přímo v počítači. Paměť typu flash tedy není nutné před vymazáním (naprogramováním) z počítače vyjmout a umístit ji do speciálního programovacího zřízení. V porovnání s EEPROM má vyšší rychlost zápisu.\n\n----\n\n====Podle stálosti obsahu paměti====\n# \'\'\'Volatilní\'\'\' - S vypnutím npájecího napětí se vymaže záznam\n# \'\'\'Nevolatilní\'\'\' - Je-li záznam stálý i po vypnutí napájecího napětí\n# \'\'\'Destruktivní\'\'\' - Paměť, u které se čtením záznam vymaže. Znamená to, že se po cyklu čtení musí zařadit cyklus zpětného zápisu.\n\n----\n\n====Podle doby uchování informace====\n=====Statické=====\nZvané SRAM, při dodržení jistých provozních parametrů drží informaci libovolně dlouho. Paměťová bunka SRAM je realizována jako bistabilní klopný obvod (který má výstup 0 nebo 1). Statická paměť obsahuje pro každý bit své kapacity takový klopný obvod + ovládací logiku, která vyhodnocuje adresní a další signály přicházejících po jednotlivých vývodech.\n\n=====Dynamické=====\nZvané DRAM, ty \"zapomínají\". U tohoto typu paměti je informace uložena pomocí elektrického náboje na kondenzátoru. Tento náboj má však tendenci vybíjet se i v době, kdy je paměť připojena ke zdroji elektrického napájení. Aby nedošlo k tomuto vybití a tím i ke ztrátě uložené informace, je nutné periodicky provádět tzv. refresh, tj. oživování paměťové bunky. Tyto kondenzátorky jsou umístěny ve čtvercové matici, a počet adresních vodičů je snižen na polovinu jinak potěbného počtu.\n\n[[Soubor:Dram.png]]\n\nMechanismus obnovy musí zajistit, aby se před uplynutím zaručené doby uchování informace adresovala všechna paměťová místa. Základem řadiče obnovy je čítač adresy řádku, který inkrementuje po 1 a po naplnění čítá znovu od nuly. \n\nObnova dat se zajišťuje většinou jako vnější obnova, ale speciální paměti mají vnitřní mechanismus obnovy, tedy obvody pro řízení obnovy jsou přímo na čipu.\n\nVnější obnova je upořádána jako:\n# \'\'\'Rozložená obnova\'\'\' - spouštějí pravidelně cykly obnovy tak, aby se v daném intervalu adresovaly všechny paměťové bunky\n# \'\'\'Dávková obnova\'\'\' - Všechny obnovovací cykly následují těsně za sebou\n# \'\'\'Transparentní obnova\'\'\' - využívá se volných intervalů v činnosti paměti, takže obnova pak nezdržuje činnost procesoru. Tento způsob je však možné použít jen někdy.\n# \'\'\'Obnovy normální činností\'\'\' - využívá se tam, kde je zaručeno adresování všech paměťových míst normální činností (např. u VIDEO paměti, kde se cyklicky čtou data pro zobrazení na monitoru\n\n----\n\n===Rychlá vyrovnávací paměť===\nRVP je rychlá SRAM umístěná mezi CPU a hlavní pamětí. Je rozdělena do bloků s konstantní velikostí. Počet bloků je různý, např. vyrovnávací paměť o kapacitě 512 kB a velikosti bloku 32 bytů obsahuje celkem 16384 bloků. Hlavní paměť je rozdělena na bloky o stejné velikosti, Těch bloků je však mnohem více, než bloků ve vyrovnávací paměti --> ne všchny bloky v operační paměti mohou být v RVP.\n\nRVP (cache) využívá principy prostorové i časové lokality. Jejím cílem je odstranění výkonnostných rozdílů mezi procesorem a hlavní pamětí. Cache obsahuje kopie dat v hlavní paměti, která jsou používána (disk obsahuje všechna data, hlavní paměř obsahuje kopie používaných dat z disku).\n\nPaměť cache je založena na poznatku, že programy obvykle nesahají do operační paměti nesystematicky, ba právě naopak - po určitou dobu pracují vždy jen s relativně malým úsekem paměti. Toho se využívá a přenese se obsah tohoto úseku do zvlástní paměti o menší kapacitě, která je zařazená mezi procesor a vlastní operační paměť, a která je dostatečně rychlá. Když má procesor \"stěstí\", najde požadovaná data v této malé paměti, a dostane je tudíž s takovou rychlostí, jakou potřebuje. Jinak musí sáhnout do pomalejší operační paměti. Trvá to trochu déle, proto ze načítá celý větší blok dat, protože s vysokou pravděpodobností procesor (nebo právě prováděný program) bude potřebovat ještě neco z tohoto bloku.\n\nRVP má výrazně menší kapacitu než DRAM. Je realizována jako paměť SRAM, je rychlejší --> je možno komunikovat bez čekacích stavů. Cena/bit vyšší, hustota menší (složitější paměťový prvek), vyšší příkon.\n\nSnaha o integraci RVP do pocesoru - Cache L1, L2 a L3\n\n======L1 Cache======\nZvaná také interní, nebo primární. Slouží k vyrovnání rychlosti velmi výkonných procesorů a pomalejších pamětí. Tento typ cache paměti je integrován přmo na čipu procesoru a je také realizován pomocí SRAM. Takovýto procesor (který má L1 cache) musí mít v sobě integrován také řadič interní cache pro řízení její rychlosti.\n\n======L2 Cache======\nExterní, sekundární. Byla vytvorena jako první, je umístěna mezi procesorem a operační pamětí. Původně externí paměť byla osazena na základní desce počítače, od procesorů Pentium Pro a Pentium II je rovněž integrována v pouzdře procesoru.\n\n======L3 Cache======\nPomocná paměť osazená na základní desce, pracující s poloviční frekvencí mikroprocesoru. Pro procesory s více jádry je sdílená pro všechny z nich (L2 bývá sdílena pro dvojici jader). Z cache pamětí je největší a nejpomalejší.\n\n----\n\n\n======Účinnost RVP======\nZákladní údaj o účinnosti RVP je pravděpodobnost úspěchu (\'\'\'hit rate\'\'\'), resp. pravděpodobnost neúspěchu (\'\'\'miss rate\'\'\'), neboli pravděpodobnost výpadku bloku. Tyto parametry mohou být definovány zvlášť pro čtení i zápis, data i instrukce.\nDoba potřebná k nalezení bloku je \'\'\'přístupová doba RVP\'\'\' (pokud blok v RVP je). V případě neúspěchu (blok v RVP není) se přičítá ztrátová doba (\'\'\'miss penalty\'\'\'), což je doba potřebná na přisunutí bloku. Cílem je navrhnout organizaci a správu RVP tak, aby hodnota hit rate byla co nejvyšší (ale závisí i na datech/programech). Obvykle to bývá 95-99%.\n\nVýpadky rozdělujeme podle příčín na:\n# \'\'\'nezbytné\'\'\' - např. po startu systému je RVP prázdná bez ohledu na konstrukci nebo nahrazovací algoritmus\n# \'\'\'kapacitní\'\'\' - způsobené omezenou kapacitou dat RVP, takže nemohou být k dispozici všechny bloky dat a instrukcí\n# \'\'\'konfliktní\'\'\' - závisí na stupni asociativity\n\n----\n\n\n====Organizace vyrovnávací paměti====\nProblém vzájemného vytlačování položek se stejným ukazatelem se řeší zvýšením stupně asociativity, tzn. každé položce je určno místo (nebo několik míst), kde se může nacházet. Toto místo je určené částí adresy položek.\n\n[[Soubor:Cache1.png]]\n\nU dvoucestné paměti mohou být v paměti uloženy současně dve položky se stejným ukazatelem. Organizace na druhém obrázku oproti prvnímu však přináší jen malé zlepšení, jelikož kapacita paměti se nezměnila a do jednoho řádku se mapuje dvojnásobné množství adres.\n\n[[Soubor:Cache2.png]]\n\nStupeň asociativity lze dále zvyšovat, až dosáhneme \'\'\'plně asociativní paměti\'\'\', kdy již je příznak celá adresa, která může být umístěna v kterékoliv pozici (v praxi nepoužitelné, příliš drahé).\n\n======\"Výběr oběti\"======\nJsou-li všecny položky pro daný ukazatel obsazeny, je třeba rozhodnout, kterou položku zrušíme a uvolníme tak místo pro novou položku. U dvoucestné RVP a RVP se stupněm asociativity > 1 vzniá problém výběru oběti.\n\nTento problém řeší některá ze strategií náhrady:\n# \'\'\'Least Recently Used (LRU)\'\'\' - ponechávají se položky používané v poslední době a ruší se nejdéle nepoužitá položka\n# \'\'\'Most Frequently Used (MFU)\'\'\' - ruší nejčastěji použitou položku\n# \'\'\'RAND\'\'\' - náhodný výběr oběti\n# \'\'\'FIFO\'\'\' - oběť je položka,která je v RVP nejdéle','utf-8'),(893,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 16\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess) (16, 17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(894,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n===Tranzitivní===\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(895,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n===Tranzitivní===\n\n<m>[(x,y)∈ R ∧ (y ,z) ∈ R ]⇒ (x,z) ∈ R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(896,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n===Tranzitivní===\n\n<m>[(x,y)∈R∧(y ,z)∈R]⇒(x,z)∈R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(897,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n===Tranzitivní===\n\n<m>[(x,y)in R and (y ,z) in R ] ⇒ (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(898,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] ⇒ (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(899,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(900,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) Rightarrow a = b</ma>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(901,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) Rightarrow a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(902,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n===Symetrická===\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\n==Kartézský součin==\n\n=Zobrazení=','utf-8'),(903,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n=Zobrazení=','utf-8'),(904,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n\n=Zobrazení=','utf-8'),(905,'','utf-8'),(906,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n\n=Zobrazení=','utf-8'),(907,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=','utf-8'),(908,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\nInverzní relaci získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=','utf-8'),(909,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=','utf-8'),(910,'=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=','utf-8'),(911,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=','utf-8'),(912,'','utf-8'),(913,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení množiny do množiny .\n#c) je vzájemně jednoznačné zobrazení na .\n#d) je zobrazení, které není prosté.','utf-8'),(914,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(915,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 17\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess), 16 (17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(916,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(917,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 23\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess), 16 (17, 19, 20, 21, 22, 23, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(918,'=Numerické metody=\n\n=Pravděpodobnost=','utf-8'),(919,'Dle skript Matematika 3\n=Numerické metody=\n\n=Pravděpodobnost=','utf-8'),(920,'Dle skript Matematika 3\n=Numerické metody=\n\n==Numerické řešení soustavy lineárních rovnic==\n===Přímé metody===\n===Iterační metody===\n\n==Numerické řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Numerické řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(921,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n===Přímé metody===\n===Iterační metody===\n\n==Numerické řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Numerické řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(922,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n===Přímé metody===\n===Iterační metody===\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Numerické řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(923,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n===Přímé metody===\n===Iterační metody===\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(924,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\n===Iterační metody===\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(925,'','utf-8'),(926,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n[[Soubor:Cramer.png]]\n\n=====Determinant=====\n\n\n\n====Gausova eliminační metoda====\n\n===Iterační metody===\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(927,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n===Iterační metody===\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(928,'','utf-8'),(929,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(930,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(931,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\nPříklad: \n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(932,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(933,'','utf-8'),(934,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagon�aln�e dominantn��, pr�av�e kdy�z absolutn�� hodnota prvku na diagon�ale je v�et�s�� nebo rovna sou�ctu absolutn��ch hodnot ostatn��ch prvk�u - a to bud pro v�sechny �r�adky, nebo pro v�sechny sloupce. Matice je � ost�re diagon�aln�e dominantn�� (zkr�acen�e o.d.d.), jsou-li nerovnosti ostr�e.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(935,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(936,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\n\'\'\'//Byla to jacobiho, kde se při počítání druhé rovnice už mohl vzít výsledek z první?\'\'\'\n\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(937,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\n\'\'//Byla to jacobiho, kde se při počítání druhé rovnice už mohl vzít výsledek z první?\'\'\n\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(938,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(939,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(940,'','utf-8'),(941,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(942,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\n====Půlení intervalu====\n====Regula falsi====\n(sečny?)\n====Newtonova metoda / metoda tečen====\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(943,'','utf-8'),(944,'','utf-8'),(945,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\n====Regula falsi / metoda sečen====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n\n====Newtonova metoda / metoda tečen====\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(946,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>x_{k} - x_{k-1}</m>\n\n====Regula falsi / metoda sečen====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n\n====Newtonova metoda / metoda tečen====\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(947,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi / metoda sečen====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n\n====Newtonova metoda / metoda tečen====\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(948,'','utf-8'),(949,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi / metoda sečen====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Newtonova metoda / metoda tečen====\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(950,'','utf-8'),(951,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(952,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\nNemusí vždy konvergovat.\nBudeme potřebovat derivace.\n\n[[Soubor:Newtonlinear.png]]\n\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(953,'','utf-8'),(954,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f\'\'(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46)\n\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(955,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f\\\'\\\'(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46)\n\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(956,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46)\n\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(957,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(958,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n<m> delim{|}{g\'(x)}{|} <= alpha forall x in <a,b> </m>\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(959,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g\'(x)}{|} <= alpha forall x in <a,b> </m>\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(960,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> {|}{g\'(x)}{|} <= alpha forall x in <a,b> </m>\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(961,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{x}{|} <= alpha forall x in <a,b> </m>\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(962,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(963,'','utf-8'),(964,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(965,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\n=Pravděpodobnost=','utf-8'),(966,'','utf-8'),(967,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n===Rungovy-Knuttovy metody====\n\n===Vícekrokové metody====\n\n=Pravděpodobnost=','utf-8'),(968,'Dle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n===Rungovy-Knuttovy metody===\n\n===Vícekrokové metody====\n\n=Pravděpodobnost=','utf-8'),(969,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'//Asi mimo téma\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n===Rungovy-Knuttovy metody===\n\n===Vícekrokové metody====\n\n=Pravděpodobnost=','utf-8'),(970,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n===Rungovy-Knuttovy metody===\n\n===Vícekrokové metody====\n\n=Pravděpodobnost=','utf-8'),(971,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n===Rungovy-Knuttovy metody===\n\n===Vícekrokové metody===\n\n=Pravděpodobnost=','utf-8'),(972,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n===Rungovy-Knuttovy metody===\n\n===Vícekrokové metody===\n\n=Pravděpodobnost=','utf-8'),(973,'','utf-8'),(974,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\n=Pravděpodobnost=','utf-8'),(975,'','utf-8'),(976,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\n=Pravděpodobnost=','utf-8'),(977,'','utf-8'),(978,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\n=Pravděpodobnost=','utf-8'),(979,'','utf-8'),(980,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\n=Pravděpodobnost=','utf-8'),(981,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=','utf-8'),(982,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 05, 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 23\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess), 16, 23(50%) (17, 19, 20, 21, 22, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(983,'','utf-8'),(984,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\'\'\'\'\'//Doplnit\'\'\'\'\'\n\nPatří sem metoda prosté iterace pro soustavy a newtonova metoda pro soustavy\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=','utf-8'),(985,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=','utf-8'),(986,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=','utf-8'),(987,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\n\n=Generování pseudonáhodných čísel=','utf-8'),(988,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(989,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(990,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(Z|A) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(Z|A) = {P(Z inter S)}/{P(S)}</m>\n\n===Geometrická===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(991,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(Z{|}A) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(Z|A) = {P(Z inter S)}/{P(S)}</m>\n\n===Geometrická===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(992,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\n===Geometrická===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(993,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(994,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(995,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(996,'==Vestavěné systémy==\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...','utf-8'),(997,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 23, 05\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess), 16, 23(50%) (17, 19, 20, 21, 22, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(998,'==Vestavěné systémy==\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony','utf-8'),(999,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n==Diskrétní pravděpodobnost==\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}\n\n==Spojitá pravděpodobost==\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'); INSERT INTO `text` VALUES (1000,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n==Diskrétní pravděpodobnost==\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\n==Spojitá pravděpodobost==\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1001,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n==Diskrétní pravděpodobnost==\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\npracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n==Spojitá pravděpodobost==\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1002,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\npracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n==Spojitá pravděpodobost==\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1003,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\npracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n===Spojitá pravděpodobnost===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1004,'','utf-8'),(1005,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n===Spojitá pravděpodobnost===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1006,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1007,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1008,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1009,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\n=Generování pseudonáhodných čísel=','utf-8'),(1010,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\n===Binomické===\n\n===Poissonovo===\n\n===Exponenciální===\n\n===Rovnoměrné===\n\n===Normální===\n\n=Generování pseudonáhodných čísel=','utf-8'),(1011,'','utf-8'),(1012,'','utf-8'),(1013,'','utf-8'),(1014,'','utf-8'),(1015,'','utf-8'),(1016,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=','utf-8'),(1017,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=','utf-8'),(1018,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=','utf-8'),(1019,'','utf-8'),(1020,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]','utf-8'),(1021,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{−1}(x) </m>\n\n===Vylučovací metoda===\n==Kompoziční metoda===','utf-8'),(1022,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\n===Vylučovací metoda===\n==Kompoziční metoda===','utf-8'),(1023,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\nNapříklad generátor exponenciálního rozložení vypočte výsledek vyhodnocením výrazu\n\nyi = A − b ∗ ln (1 − xi)\n\nkde rovnoměrně rozložené xi získáme například vhodným kongruentním generátorem.\n\n===Vylučovací metoda===\n==Kompoziční metoda===','utf-8'),(1024,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\nNapříklad generátor exponenciálního rozložení vypočte výsledek vyhodnocením výrazu\n\nyi = A − b ∗ ln (1 − xi)\n\nkde rovnoměrně rozložené xi získáme například vhodným kongruentním generátorem.\n\n===Vylučovací metoda===\nTato metoda pracuje na principu náhodné volby bodu v ploše obdélníku ohraničujícího graf funkce hustoty daného rozložení. Pokud máme generátor rovnoměrného rozložení, můžeme generovat náhodně (s rovnoměrným rozložením) body uvnitř obdélníku o souřadnicích (x, y). Pokud náhodným bodem ”trefíme” plochu pod funkcí hustoty f, vrátíme souřadnici x jako nově vygenerované náhodné číslo. Pokud ”netrefíme”, generujeme další bod a opakujeme tento postup.\n\nIntuitivně lze snadno pochopit, že tam, kde jsou větší hodnoty funkce f je také vyšší pravděpodobnost že zasáhneme plochu a vrátíme x, což přesně koresponduje s větší hustotou pravděpodobnosti výskytu této hodnoty x.\n\nDůležité je že se musíme trefit do rozsahu a negenerovat body úplně mimo. Funkci hustoty proto ohraničíme obdélníkem, který má výšku M, což je maximální hodnota funkce. Stejně tak se musíme omezit na ose x. (x1 a x2).\n\nZ toho všeho plyne, že metoda není použitelná pro rozložení s nekonečným rozsahem.\n\nVhodné také nejsou funkce hustoty, který zabírají příliš malou část obdélníku, protože se málo často trefujeme a generování pak trvá příliš dlouho.\n\n==Kompoziční metoda===','utf-8'),(1025,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\nNapříklad generátor exponenciálního rozložení vypočte výsledek vyhodnocením výrazu\n\nyi = A − b ∗ ln (1 − xi)\n\nkde rovnoměrně rozložené xi získáme například vhodným kongruentním generátorem.\n\n===Vylučovací metoda===\nTato metoda pracuje na principu náhodné volby bodu v ploše obdélníku ohraničujícího graf funkce hustoty daného rozložení. Pokud máme generátor rovnoměrného rozložení, můžeme generovat náhodně (s rovnoměrným rozložením) body uvnitř obdélníku o souřadnicích (x, y). Pokud náhodným bodem ”trefíme” plochu pod funkcí hustoty f, vrátíme souřadnici x jako nově vygenerované náhodné číslo. Pokud ”netrefíme”, generujeme další bod a opakujeme tento postup.\n\nIntuitivně lze snadno pochopit, že tam, kde jsou větší hodnoty funkce f je také vyšší pravděpodobnost že zasáhneme plochu a vrátíme x, což přesně koresponduje s větší hustotou pravděpodobnosti výskytu této hodnoty x.\n\nDůležité je že se musíme trefit do rozsahu a negenerovat body úplně mimo. Funkci hustoty proto ohraničíme obdélníkem, který má výšku M, což je maximální hodnota funkce. Stejně tak se musíme omezit na ose x. (x1 a x2).\n\nZ toho všeho plyne, že metoda není použitelná pro rozložení s nekonečným rozsahem.\n\nVhodné také nejsou funkce hustoty, který zabírají příliš malou část obdélníku, protože se málo často trefujeme a generování pak trvá příliš dlouho.\n\n===Kompoziční metoda===\nVe skriptech z IMS je pouze toto: \n\nPro některá rozložení je možné použít několik různých metod pro různé oblasti funkce hustoty rozložení a výsledek poskládat z těchto komponent. Tato metoda je vhodná pro komplikovanější průběhy funkce hustoty pravděpodobnosti f.','utf-8'),(1026,'','utf-8'),(1027,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIA) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIA) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\nNapříklad generátor exponenciálního rozložení vypočte výsledek vyhodnocením výrazu\n\nyi = A − b ∗ ln (1 − xi)\n\nkde rovnoměrně rozložené xi získáme například vhodným kongruentním generátorem.\n\n===Vylučovací metoda===\nTato metoda pracuje na principu náhodné volby bodu v ploše obdélníku ohraničujícího graf funkce hustoty daného rozložení. Pokud máme generátor rovnoměrného rozložení, můžeme generovat náhodně (s rovnoměrným rozložením) body uvnitř obdélníku o souřadnicích (x, y). Pokud náhodným bodem ”trefíme” plochu pod funkcí hustoty f, vrátíme souřadnici x jako nově vygenerované náhodné číslo. Pokud ”netrefíme”, generujeme další bod a opakujeme tento postup.\n\nIntuitivně lze snadno pochopit, že tam, kde jsou větší hodnoty funkce f je také vyšší pravděpodobnost že zasáhneme plochu a vrátíme x, což přesně koresponduje s větší hustotou pravděpodobnosti výskytu této hodnoty x.\n\n[[Soubor:Vylucovacimetoda.png]]\n\nDůležité je že se musíme trefit do rozsahu a negenerovat body úplně mimo. Funkci hustoty proto ohraničíme obdélníkem, který má výšku M, což je maximální hodnota funkce. Stejně tak se musíme omezit na ose x. (x1 a x2).\n\nZ toho všeho plyne, že metoda není použitelná pro rozložení s nekonečným rozsahem.\n\nVhodné také nejsou funkce hustoty, který zabírají příliš malou část obdélníku, protože se málo často trefujeme a generování pak trvá příliš dlouho.\n\n===Kompoziční metoda===\nVe skriptech z IMS je pouze toto: \n\nPro některá rozložení je možné použít několik různých metod pro různé oblasti funkce hustoty rozložení a výsledek poskládat z těchto komponent. Tato metoda je vhodná pro komplikovanější průběhy funkce hustoty pravděpodobnosti f.','utf-8'),(1028,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 24, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 05\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess), 16, 23 (17, 19, 20, 21, 22, 24)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1029,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 05, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (75% chybí křivky), 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1030,'','utf-8'),(1031,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Křivka===\nPoužití: Definice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\ny = F(x); nevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n<m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n<m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(1032,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Křivka===\nPoužití: Definice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(1033,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 05, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (85%), 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1034,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Křivka===\nPoužití: Definice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n====Spojitost====\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n====Spline====\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(1035,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(1036,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n==== Úsečka ====\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n====Kružnice====\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n====Elipsa====\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n====Křivka====\nPoužití: Definice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n====Spojitost====\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n====Spline====\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(1037,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n===Křivka===\nPoužití: Definice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n====Spojitost====\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n====Spline====\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n\n----\n\n==Algoritmy==\n===Úsečka===\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n===Kružnice===\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n===Elipsa===\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>','utf-8'),(1038,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n===Křivka===\nPoužití: Definice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n====Spojitost====\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n====Spline====\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n\n----\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n==Křivka==','utf-8'),(1039,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n==Křivka==','utf-8'),(1040,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n====Požadované vlastnosti====\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n\n====Druhy křívek====\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n====Zápis křivky====\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n====Spojitost====\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n====Spline====\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n\n----','utf-8'),(1041,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n\n----','utf-8'),(1042,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n\n==Aproximační křivky==\n\n----','utf-8'),(1043,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n===Kochanek-Bartels spline===\n===Catmull-Rom===\n\n==Aproximační křivky==\n\n----','utf-8'),(1044,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n===Kochanek-Bartels spline===\n===Catmull-Rom===\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1045,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\nUrčena dvěma koncovými body a dvěma tečnami\n\n===Kochanek-Bartels spline===\n===Catmull-Rom===\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1046,'','utf-8'),(1047,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\nUrčena dvěma koncovými body a dvěma tečnami\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n===Catmull-Rom===\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1048,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\nUrčena dvěma koncovými body a dvěma tečnami\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n===Catmull-Rom===\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1049,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n===Catmull-Rom===\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1050,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1051,'','utf-8'),(1052,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky, algoritmus de Casteljau===\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1053,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n\n====Algoritmus de Casteljau====\n\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1054,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 11, 15, 05, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (95%), 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1055,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 05, 11, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11 (95%), 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1056,'','utf-8'),(1057,'','utf-8'),(1058,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1059,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1060,'','utf-8'),(1061,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n===NURBS křivky===\n----','utf-8'),(1062,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n===NURBS křivky===\n----','utf-8'),(1063,'','utf-8'),(1064,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n----','utf-8'),(1065,'','utf-8'),(1066,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle priýného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n\n#Zobecnění B-spline křivek.\n#Racionální => váhové koeficienty\n#Umožňuje vkládat řídící bod a zachovat přitom tvar!\n#Invariantní vůči lineárním změnám\n#Přesné vyjádření kuželoseček\n#Neuniformné uzlový vektor t_i+1 - t_i není konstanta.\n\n[[Soubor:Nurbs.png]]\n----','utf-8'),(1067,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 05, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 11, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1068,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 5</m>\n\n<m>Ei + delta x / delta y >= 5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle pružného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n\n#Zobecnění B-spline křivek.\n#Racionální => váhové koeficienty\n#Umožňuje vkládat řídící bod a zachovat přitom tvar!\n#Invariantní vůči lineárním změnám\n#Přesné vyjádření kuželoseček\n#Neuniformné uzlový vektor t_i+1 - t_i není konstanta.\n\n[[Soubor:Nurbs.png]]\n----','utf-8'),(1069,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>Ei + delta x / delta y < 0,5</m>\n\n<m>Ei + delta x / delta y >= 0,5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle pružného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n\n#Zobecnění B-spline křivek.\n#Racionální => váhové koeficienty\n#Umožňuje vkládat řídící bod a zachovat přitom tvar!\n#Invariantní vůči lineárním změnám\n#Přesné vyjádření kuželoseček\n#Neuniformné uzlový vektor t_i+1 - t_i není konstanta.\n\n[[Soubor:Nurbs.png]]\n----','utf-8'),(1070,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>E_i + {Delta x}/{Delta y} < 0,5</m>\n\n<m>E_i + {Delta x}/{Delta y} >= 0,5</m>\n\nUpravená\n\n<m>2 delta x E_i + 2 delta y < delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 delta x E_i + 2 delta y - delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle pružného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n\n#Zobecnění B-spline křivek.\n#Racionální => váhové koeficienty\n#Umožňuje vkládat řídící bod a zachovat přitom tvar!\n#Invariantní vůči lineárním změnám\n#Přesné vyjádření kuželoseček\n#Neuniformné uzlový vektor t_i+1 - t_i není konstanta.\n\n[[Soubor:Nurbs.png]]\n----','utf-8'),(1071,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>E_i + {Delta x}/{Delta y} < 0,5</m>\n\n<m>E_i + {Delta x}/{Delta y} >= 0,5</m>\n\nUpravená\n\n<m>2 Delta x E_i + 2 Delta y < Delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 Delta x E_i + 2 Delta y - Delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle pružného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový souˇcet – kˇrivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n\n#Zobecnění B-spline křivek.\n#Racionální => váhové koeficienty\n#Umožňuje vkládat řídící bod a zachovat přitom tvar!\n#Invariantní vůči lineárním změnám\n#Přesné vyjádření kuželoseček\n#Neuniformné uzlový vektor t_i+1 - t_i není konstanta.\n\n[[Soubor:Nurbs.png]]\n----','utf-8'),(1072,'\'\'\'Úplný název tématu:\'\'\' Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek\n\n==Vatové podklady==\n\n\'\'\'Rasterizace\'\'\'\n\n# je proces převodu vektorových entit na jejich odpovídající rastrové zobrazení.\n# probíhá automaticky se snahou o maximální rychlost.\n# je vždy bez problému řešitelná (na rozdíl od Vektorizace).\n# je velmi často opakovaná operace -> důraz na rychlost provedení.\n# je realizována grafickou kartou.\n\n\'\'\'Definice ze slidů\'\'\'\n\nProces převodu vektorové reprezentace dat na jejich rastrovou formu s cílem dosáhnout maximální možnou kvalitu a zároveň rychlost výsledného zobrazení.\n\n\n\n\n=== Úsečka ===\nVětšinou se využívá definování úsečky pomocí 2 koncových bodů.\n\nÚsečku můžeme zapsat následujícími matematickými zápisy:\n\n\'\'\'Obecná rovnice úsečky\'\'\'\n\n<m>A x + B y + C = 0, </m> \n\n<m>A = (y_1 - y_2), </m>\n\n<m>B = (x_2 - x_1)</m>\n\n\'\'kdyby jste to chtěli dosazovat nezapomeňte vyčíslit Cčko\'\'\n\n\'\'\'Parametrické vyjádření\'\'\'\n\n<m>x = x_1 + t (x_2 - x_1)</m>\n\n<m>y = y_1 + t (y_2 - y_1)</m>\n\n<m>t in <0,1></m>\n\n\'\'\'Směrnicový tvar\'\'\'\n\n<m>y = kx + q</m>\n\n<m>k = (y_2 - y_1)/(x_2 - x_1)</m>\n\n===Kružnice===\n\'\'\'Rovnice kružnice\'\'\'\n\n<m>(x - s_1)^2 + (y - s_2)^2 - R^2 = 0 </m>\n\nKružnice je 8x souměrná => stejně jako u úseček vše kreslíme jen pro 1/8 kvadrantu pak upravujeme.\n\nJe to první polovina prvního kvadrantu = > TA VRCHNÍ!\n\nVšechny algoritmy jsou pro kružnici se středem 0,0.\n\n\n\n\n===Elipsa===\n\n\'\'\'\'\'//není součástí státnicového okruhu\'\'\'\'\'\n\n\'\'\'Rovnice elipsy\'\'\'\n\n<m>F(x,y) : b^2 x^2 + a^2 y^2 - a^2 b^2 = 0</m> \n\nPozor elipsa je zde není definována pomocí ohnisek, ale pomocí:\n#středu\n#hodnotami hlavní a vedlejší poloosy (a a b)\n#úhlem natočení poloos\n\nJe pouze 4x symetrická, počítáme celou čtvrtinu a zbytek získáme záměnou souřadnic.\n\nVšechny algoritmy jsou pro elipsu se středem 0,0.\n\nČtvrtina, kterou počítáme se dělí na dvě části, které jsou rozděleny podle parciálních derivací x a y.\n\n=Algoritmy=\n==Úsečka==\nAlgoritmy tak jak jsou popsány platí pouze (AND):\n* v prvním kvadrantu\n* pokud je úsečka rostoucí od počátečního bodu ke koncovému\n* nejrychteji stoupá ve směru osy x\n\n\'\'\'Řešení:\'\'\'\n\n# neroste správně - prohození souřadnic\n# špatný kvadrant - přidání mínus k jedné souřadnici\n\n=====DDA = Digital Differential Analyser=====\nJeden z prvních algoritmů, nyní se nepoužívá, protože je pomalý, kvůli tomu, že využívá floating-point aritmetiku (příliš náročné pro HW -> nízká efektivita).\n\n\'\'\'Princip:\'\'\'\n# přičtení kroku na ose X: <m>delta x = 1px</m>\n# přičtení kroku na ose Y: velikost směrnice\n# Zaokrouhlení Y na nejbližší celé číslo\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n + delta x, delta x = 1</m>\n\n<m>y_{n+1} = y_n + delta y, delta y = k = (y_2-y_1) / (x_2-x_1)</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:dda.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>LineDDA(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, round(y));\n y += k;\n }\n}</nowiki>\n\n=====Modifikace Error control DDA=====\nRozdíl:\n* Na ose X stejné jako bez modifikace\n* Y zůstává v celých číslech, zůstává pouze souřadnící a my se podle chyby (odchylky) rozhodujeme jestli ještě pořád kreslit na stejné Y nebo už jej inkrementovat.\n\nPrincip:\n# Na začátku je chyba nulová.\n# K chybě se přičte směrnice.\n# Kontrola jestli je chyba větší než \'\'\'0,5\'\'\'.\n# Pokud ano, přesun o Y nahoru a zmenšení chyby o jedna.\n\nKód:\n <nowiki>LineEC(int x1, int y1, int x2, int y2)\n{\n double k = (y2-y1) / (x2-x1);\n double E = 0;\n int y = y1;\n\n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n E += k;\n if (E >= 0.5) { y++; E -= 1; }\n }\n}</nowiki>\n\n=====Bresenhamův algoritmus=====\nNejčastěji používaný algoritmus na rasterizaci úsečky, protože používá celočíselné operace, porovnávání -> velmi efektivní implementace v HW\n\n\'\'\'Princip:\'\'\'\n\n# přičtení kroku na ose X: <m> delta x = 1px</m>\n# posun na ose Y: podle znaménka prediktoru\n\nV podstatě funguje stejně jako error control DDA, ale je tu snaha o převod na celočiselné operace => zůstává porovnávání chyby, ale nerovnice se upraví tak ať se porovnává s nulou => rozhodování podle znaménka místo porovnávání s 0.5\nPřevod rovnice pro rozhodování podle znaménka\nNerovnice se vynásobí <m>2 delta x</m>\n\nPuvodni nerovnice\n\n<m>E_i + {Delta x}/{Delta y} < 0,5</m>\n\n<m>E_i + {Delta x}/{Delta y} >= 0,5</m>\n\nUpravená\n\n<m>2 Delta x E_i + 2 Delta y < Delta x </m>\n\nPřevedeno na nerovnost nuly\n\n<m>2 Delta x E_i + 2 Delta y - Delta x < 0</m>\n\n\n\n\'\'\'Co je vlastně ten prediktor?\'\'\'\n\nCelá tahle nerovnice je prediktor.\n\nPrediktor je číslo, podke kterého se rozhodneme jestli postoupit na ose X o 1 nebo vůbec.\n\nPočáteční prediktor je <m>2 delta y - delta x</m>\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Bresenham.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>LineBres(int x1, int y1, int x2, int y2)\n{\n int dx = x2-x1, dy = y2-y1;\n int P = 2*dy – dx;\n int P1 = 2*dy, P2 = P1 - 2*dx;\n int y = y1;\n \n for (int x = x1; x <= x2; x++)\n {\n draw_pixel( x, y);\n if (P >= 0)\n { P += P2; y++; }\n else\n P += P1;\n }\n}</nowiki>\n\n\n----\n\n==Kružnice==\n\n=====Naivní algoritmus=====\nFloating point\nBod po bodu\n\n\'\'\'Princip:\'\'\'\n\n0. ve směru hodinových ručiček od dvanáctky coz jsou souradnice 0,R a koncíme tehdy když x = y (45 stupňů)\n\n1. x bod po bodu\n\n2. y podle vztahu <m>y = sqrt{R^2 - x^2} </m> a zaokrouhlení na celé číslo\n\n\nKód:\n\n <nowiki>CircleByPoints(int s1, int s2, int R)\n{\n int x = 0, y = R;\n while (x <= y)\n {\n draw_pixel_circle(x, y);\n x++;\n y = sqrtR*R – x*x);\n }\n}</nowiki>\n\n=====Vykreslení kružnice jako N-úhelník =====\n\n– varianta DDA\n\nFloating point => naroky na HW nepřijatelně vysoké\n\nPOJEM: aplikace rotační transformace bodu\n\n\'\'\'Princip:\'\'\'\n\n1. posouvání o konstantní úhel\n\n2. vypočtení souřadnice\n\n3. spojení souřadnic úsečkou\n\n\n\'\'\'Pozor\'\'\' ve výpočtu se používá sin a cos, ten se však předpočíta před cyklem, protože jde pořád o stejný úhel\n\n\'\'\'Obecný výpočet:\'\'\'\n\n<m>x_{n+1} = x_n cos alpha - y_n sin alpha </m>\n\n<m>y_{n+1} = x_n sin alpha + y_n cos alpha </m>\n\nKód:\n\n <nowiki>CircleDDA(int R, int N)\n{\n double cosa = cos(2*PI/N);\n double sina = sin(2*PI/N);\n int x1 = R, y1 = 0, x2, y2;\n for (int i = 0; i < N; i++)\n {\n x2 = x1*cosa – y1*sina;\n y2 = x1*sina + y1*cosa;\n draw_line(x1, y1, x2, y2);\n x1 = x2;\n y1 = y2;\n }\n}</nowiki>\n\n=====Midppoint pro kružnici=====\nVariace na Bresenhama\nceločíselný => snadná HW implementace\n\n\'\'\'Princip:\'\'\'\n\nstejne jako předchozí začne na \'\'\'0,R až po x = y\'\'\'\n\n1. v ose x se postupuje po Delta x = 1\n\n2. v ose y podle znaménka prediktoru\n\n\n\'\'\'Prediktor:\'\'\'\n\nse ovhozuje z rovnice kružnice, která je položena rovna nule.\n\nPrediktor je funkční hodnota v bodě kružnice\n\n<m>p_i = (x_i + 1)^2 + (y_i - 1/2)^2 - R^2</m>\n\ncož není uplne dobře, protože je tam mocnina a desetinne číslo => rekurentní prediktor\n\nk tomu se dojte tak, že se do rovnosti dá pi a pi+1 současný a násedující prediktor\n\nmatamatickým postupem, které nepředvedl, ale je zřejmý se vysekají R^2 a upraví se to na následující tvar:\n\n<m>p_{i+1} = p_i + 2 x_i + 3 </m> kde <m>p_i < 0 </m>\n\n<m>p_{i+1} = p_i + 2 x_i - 2yi + 5</m> kde <m>p_i >= 0</m>\n\nmusí se stanovit ještě počáteční prediktor a to bude <m>p_i = 1-R</m>\n\n\nOproti bresenhamovi změna, když je potřeba posunout, tak se y odečítá (body klesají dolů)\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Midpoint_kruh.jpg]]\n\n\'\'\'Kód:\'\'\'\n\n <nowiki>CircleMid(int s1, int s2, int R)\n{ \n int x = 0, y = R;\n int P = 1-R, X2 = 3, Y2 = 2*R-2;\n while (x < y)\n {\n draw_pixel_circle(x, y);\n if (P >= 0)\n { P += -Y2; Y2 -= 2; y--; }\n\n P += X2;\n X2 += 2;\n x++;\n }\n}</nowiki>\n\n\n\n----\n\n==Elipsa==\n\n\'\'\'\'\'//Není součástí státnicového okruhu\'\'\'\'\'\n\n=====Midppoint pro elipsu=====\nEfektivní v HW\n\n\'\'\'Princip:\'\'\'\n\n1. začneme na souřadnici 0,b a vyplnujeme první oblast\n\n2. na ose x jdeme po pixelu, dokud není <m>2 b^2 x = 2 a^2 y</m> (to je vyjádření těch parciálních derivací)\n\n3. na y se posouváme podle znaménka prediktoru\n\n4. po rovnosti se dostaneme do druhé oblasti v druhé oblasti postupujeme po jednom y\n\n5. a v ose x s posunujeme podle znaménka prediktoru\n\n\'\'\'Obrázek:\'\'\'\n\n[[Soubor:Oblasti_elipsy.jpg]]\n\n\'\'\'Kód:\'\'\'\n <nowiki>ElipseMid(int A, int B)\n{ \n int x = 0, y = B, AA = A*A, BB = B*B;\n int P = BB – AA*B + AA/4;\n while (AA*y > BB*x)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+3); \n x++; \n }\n else\n { \n P += BB*(2*x+3) + AA*(2-2*y); \n x++; \n y--; \n }\n }\n P = BB*(x+0,5)*(x+0,5)+AA*(y-1)*(y-1)-AA*BB;\n while (y >= 0)\n { \n draw_pixel_elipse(x, y);\n if (P < 0)\n { \n P += BB*(2*x+2) + AA*(3-2*y); \n x++; \n y--; \n }\n else\n { \n P += AA*(3-2*y); \n y--; \n }\n }\n}</nowiki>\n\n=Křivka=\n\'\'\'Použití:\'\'\'\n\nDefinice objektů, definice fontů, kreativní grafika, dráhy objektů při animaci, šablonování.\n\n==Požadované vlastnosti==\n#Invariance k lineárním transformacím\n#Interpolace krajních bodů (že jimi prochází)\n#Konvexní obálka (leží v konvexní obálce svých řídících bodů)\n#Lokalita změn (posunutí jednoho řídícího bodu neovlivní celou křivku)\n\n==Druhy křivek==\n#Křivky můžou být \'\'\'interpolační i aproximační\'\'\' (ty neprocházejí řídícími body).\n\n#\'\'\'Racionální\'\'\' křivky mají řídící body, které mají váhu, která ovlivňuje tvar křivky. Proto jsou invariantní vůči perspektivní projekci. Naopak Neracionální křivky nejsou a jejich řídící body mají koeficient váhy w = 1. Takže tvar křivky ovlivňuje pouze poloha bodu.\n\n==Zápis křivky==\nMatematicky:\n\n y = F(x); \n\nnevhodné pro potřeby grafiky\n\n\nParametricky:\n\n Q(t) = [x(t), y(t)]; t in <0,1>\n\n\nPolynomiální:\n\n(například kubickým polynomem)\n\n <m>x(t) = a_x t^3 + b_x t^2 + c_x t + d_x </m>\n\n <m>y(t) = a_y t^3 + b_y t^2 + c_y t + d_x </m>\n\n\nMaticový zápis:\n\n[[Soubor:Kriva_matice.png]]\n\n\n==Spojitost==\n\nParametrická Spojitost křivek:\n\n#C0 - totožnost navazujících koncových bodů\n#C1 - totožnost tečných vektorů v navazujících bodech\n#C2 - totožnost vektorů 2. derivace v navazujících bodech\n\nGeometrická spojitost (oslabená podmínka spojitosti):\n\n#G0 - totožnost navazujících koncových bodů\n#G1 - tečné vektory v navazujících bodech jsou lineárně závislé\n#G2 - shoda první křivosti v navazujících bodech\n\n==Spline==\nPojmenováno podle pružného kovového křivítka, které se prokládá body.\n\nPo částech polynomiální křivka.\n\n\'\'\'Spline křivka stupně n má spojitost <m>C^{n-1}</m>.\'\'\'\n\nCíl použití spline křivek je minimalizování křivosti křivky (délky...) a efektivní řízení tvaru křivky.\n\n\'\'\'Přirozený spline\'\'\' je ten, který interpoluje své řídící body.\n\n==Interpolační křivky==\n===Fergusonova kubika===\n#Určena dvěma koncovými body a dvěma tečnami\n\n#Segmenty navazují C_1 (schodné tečné vektory)\n\n#Přirozený spline\n\n# - nelokální změny\n\n# - Neinteraktivní a neintuitivní řízení tvaru\n\n[[Soubor:Ferguson.png]]\n\n===Kochanek-Bartels spline===\n\n#Interpolační spline\n\n#Využívá Fergusonovy kubiky pro interpolaci.\n\n#Každý bod má 3 koeficienty (a,b,c), které určují chování přímky v daném bodě.\n\n# # a = tenze, b = šikmost, c = spojitos\n\n#Použití pro definici dráhy objektů, konstantní rychlost bodu\n\n===Catmull-Rom===\n#Je to kochanek-Bartels s nulovými koeficienty.\n\n#Pro interpolační křivku určenou body P_0 až P_N-1 platí, že tečný vektor v P_i je rovnoběžný se spojnicí P_i-1 a P_i+1.\n\n# - Není uvnitř konvexní obálky svých interpolačních bodů.\n\n# ! začíná až v P_1 a končí už v P_N-2.\n\n[[Soubor:Catmull-rom.png]]\n\n==Aproximační křivky==\n===Beziérovy křivky a kubiky=== \n#2D grafika, fonty, šablonování\n\n#Využití Bernsteinových polynomů (které mají rekurentní definici)\n\n#Pro určení křivky řádu n potřebujeme n+1bodů\n\n#Prochází koncovými body.\n\n#Leží v konvexní obálce.\n\n[[Soubor:Bezierkrivka.png]]\n\n\n====Algoritmus de Casteljau====\nJe rekurzivní algoritmus pro vykreslování beziérových křivek.\n\nÚseky řídícího polynomu jsou děleny v poměru hodnot t a 1-t viz obrázek.\n\n[[Soubor:Casteljau.png]]\n\n===Racionální Beziérovy křivky===\nZměna v použití neracionálních Bernsteinových polynomů za racionální.\n\n#Mají nezápornou hodnotu.\n#Mají jednotkový součet – křivka leží v konvexní obálce.\n#Nemají rekurentní definici!\n# - Pro vykreslení nelze použít algoritmus de Casteljau!\n\n===Coonsovy křivky (kubiky)===\n#Křivka stupně n je určena n+1 body\n#Neprochází koncovými řídícími body\n#Nelze přidat jeden bod, pracuje se po segmentech.\n\n[[Soubor:Coonsovy.png]]\n\n===B-spline křivky===\n#Zobecnění Coonsových křivek.\n#Určena n+1 body\n#stupně k má spojitost k+1, ale nemusí u navazování segmentů platit t in <0,1>\n#Existuje takzvaný uzlový vektor, což jsou hodnoty parametru t v uzlech.\n\n[[Soubor:Bspline.png]]\n\n===NURBS křivky===\n\n#Zobecnění B-spline křivek.\n#Racionální => váhové koeficienty\n#Umožňuje vkládat řídící bod a zachovat přitom tvar!\n#Invariantní vůči lineárním změnám\n#Přesné vyjádření kuželoseček\n#Neuniformné uzlový vektor t_i+1 - t_i není konstanta.\n\n[[Soubor:Nurbs.png]]\n----','utf-8'),(1073,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 28, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 05, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 11, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28 (90%), 29, 30, 31 (10, 26, 28, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1074,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 05, 15, 24, 28\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 11, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04 (05, 06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28 (90%), 29, 30, 31 (10, 26, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1075,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'((A\'.D0)\'+(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]\n\nAngl. Ripple carry - carry musí procházet přes všechny stupně čítačky. Cenově výhodné řešení, pomalé. Zpoždění je úměrné počtu bitů. Urychlit je to možné použitím paralelní struktury.\n\n----\n\n\n=====ALU=====\nJe to zkratka z angl. Arithmetic-Logic Unit, neboli také aritmeticko-logická jednotka. Patří mezi základní stavební prvky počítače. V ALU se vykonávají všechny aritmetické a logické operace s číslami (operandy) načtenými z operační paměti v pevné řádové čárce. Pro práci s operandy v plovoucí řádové čárce se používá FPU, Floating-Point Unit.\n\nVstupem jsou dva n-bitové operandy A a B. Aritmetická a logická jednotka jsou oddělené.\n\n\'\'\'Aritmetické operace:\'\'\'\n# sčítání\n# odčítání\n# násobení\n# dělení\n# bitový posuv (doprava i doleva)\n# inkrement\n# dekrement\n\n\'\'\'Logické operace:\'\'\'\n# Logický součin - AND\n# Logický součet - OR\n# Negace - NOT\n# NAND\n# NOR\n# XOR\n# porovnání dvou čísel','utf-8'),(1076,'===Kombinační logické obvody===\nJsou to logické obvody, jejichž výstupní stavy závisí pouze na aktuální kombinaci stavů vstupních. Výstupy kombinačních logických obvodů tedy okamžitě reflektují jakoukoliv změnu na vstupech obvodu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody. Na rozdíl odlogických obvodů sekvenčních u nich nedochází k žádnému paměťovému efektu. Protože nemají kombinační logické obvody žádnou paměť předchozích stavů, každé kombinaci vstupních proměnných odpovídá právě jedna definovaná hodnota výstupní proměnné. Chování kombinačních logických obvodů (tj. závislost výstupní proměnné na kombinaci hodnot vstupních proměnných) můžeme vždy popsat nějakou logickou funkcí. Tuto logickou funkci často vyjadřujeme pravdivostní tabulkou, příp. pomocí logických výrazů. \n\n----\n\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. Pravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců. Počet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení (tj. hodnota, která bude na výstupu kombinačního logického obvodu v případě, že na jeho vstupech bude kombinace hodnot stejná jako na daném řádku pravdivostní tabulky). Kombinace hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n\n===Logická hradla===\nJsou to obvody, které realizují elementární logické funkce (jako je logický součet, logický součin, negace nebo logické funkce NAND, NOR nebo XOR), nazýváme logická hradla. Logická hradla rovněž představují nejjednodušší kombinační logické obvody. Z logických hradel se pak skládají složitější logické obvody, a to jak kombinační, tak sekvenční. Kombinačním logickým obvodem je dále např. sčítačka, dekodér, kodér, multiplexor nebo demultiplexor.\n\n----\n\n\n=====Multiplexor=====\nDigitální multiplexor (příp. multiplexer, často též označkovaný zkratkou MUX) je kombinační logický obvod, který plní funkci elektronického přepínače několika vstupních logických signálů na jeden výstup, přičemž přepínání je řízeno adresovým signálem. Multiplexory se často používají tam, kde potřebujeme z nějakého důvodu snížit počet vodičů při přenosu signálu. Multiplexory lze využít při sledovaní stavu vstupů, např. numerické klávesnice, při přenosu dat, pro směrování signálu nebo řízení datové sběrnice. Ve spojení s demultiplexorem, který má opačnou funkci než multiplexor a přepíná jeden vstupní signál na několik výstupů, můžeme dále přenášet paralelní data sériově s využitím jediného datového vodiče (např. optického kabelu, telefonní linky apod.).\n\n[[Soubor:mux.png]]\n\nMultiplexor má obecně k datových vstupů, příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n) a jeden datový výstup. Obvod může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody často obsahují několik multiplexorů, které sdílí adresové vstupy a jsou vybaveny několika sadami vstupů a několika výstupy. Který z k datových vstupů D(0) až D(k-1) bude připojen na výstup Y, určuje binární kódované číslo na adresových vstupech A(0) až A(n-1).\n\n[[Soubor:multiplexer.png]]\n\n======Jak takovou věc udělat?======\nPři návrhu multiplexoru potřebujeme najít funkci pro výstup Y. Tu dokážeme najít/vypočítat buď pomocí Karnaughovy mapy nebo nejlépe pravdivostní tabulky.\n\n[[Soubor:Prav_tabulka.png]]\n\nFunkce pro tuto pravdivostní tabulku bude ve tvaru: \'\'\'A\'.D0+A.D1\'\'\'. Vzhledem k tomu, že se při návrhu většinu používají hradla NAND, potřebujeme provést dvojitou negaci, a minimalici logické funkce (odstranit +, protože to NAND neumí), aby funkce dávala stejný výsledek. Tím pádem bude vypadat nějak takhle: \'\'\'((A\'.D0)\'.(A.D1)\')\' \'\'\'\n\nNa základě této funkce můžeme navrhnout multiplexor pomocí tří hradel NAND a jednoho invertoru:\n\n[[Soubor:Mux_schema.png]]\n\nJe je možné navrhnout také pomocí čtyř hradel NAND, nebo dvou AND, jednoho OR a inventoru.\n\n----\n\n=====Demultiplexor=====\nDigitální demultiplexor (angl. demultiplexer, zkráceně demux, příp. DMUX) je kombinační logický obvod, který má přesně opačnou funkci než multiplexor. Zatímco multiplexor plní funkci elektronického přepínače několika vstupních signálů na jeden výstup, demultiplexor přepíná jeden vstupní signál na několik výstupů, přičemž příslušný výstup se vybírá adresovým signálem. Přenášíme-li tedy multiplexovaný signál z n kanálů po jednom vedení, můžeme ho pomocí demultiplexoru transformovat zpět do n kanálů. Nutným předpokladem je samozřejmě též přenos adresových signálů. Demultiplexory se často používají právě ve spojení s multiplexory pro deserializaci signálu přenášeného s využitím jediného datového vodiče (např. optického kabelu, telefonní linky, příp. satelitního spojení apod.). Demultiplexor můžeme dále použít např. pro řízení číslicového, alfanumerického nebo maticového LED, příp. LCD displeje. V takovém případě je v každém okamžiku aktivní vždy pouze jedna číslice/znak/řádek displeje, v závislosti na aktuální adrese přiváděné na adresové vstupy demultiplexoru, a mezi nimi se v dostatečně rychlém sledu přepíná tak, aby toto přepínání nebylo pro lidské oko postřehnutelné.\n\n[[Soubor:dmux.png]]\n\nDemultiplexor má obecně jeden datový vstup, k datových výstupů a příslušný počet adresových vstupů (pro počet adresových vstupů n platí k=2^n). Demultiplexor může být dále vybaven vstupy uvolnění, které slouží k aktivaci a deaktivaci obvodu. Integrované logické obvody někdy obsahují v jednom pouzdře několik demultiplexorů, které pak sdílí adresové vstupy. Ke kterému z k výstupů Y0 až Y(k-1) bude připojen datový vstup D, určuje binárně kódované číslo na adresových vstupech A(0) až A(n-1)\n\n[[Soubor:Demux.gif]]\n\nOrientaci kosočtverce neřešit, je to jedno. Důležité je kolik kabelů do krabičky leze a kolik vyleze. Častokrát to ani nevypadá jako kosočtverec, ale dá se tam obdélník:\n\n[[Soubor:Image010.jpg]]\n\n\n======Jak takovou věc udělat?======\nPokud chceme dvoukanálový demultiplexor, který má jeden datový vstup D a dva výstupy Y0 a Y1. Přepínání mezi dvěma výstupy lze řídit jediným adresovým signálem A. Funkci demultiplexoru lze vyjádřit pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_demux.png]]\n\nJe-li A=0, datový vstup D bude vnitřní logikou připojen k výstupu Y0, zatímco bude-li na adresovém vstupu A logická 1, budou data přepojena na výstup Y1. Neaktivní výstup bude v logické 0. Přímo z tabulky lze vyjádřit obě výstupní funkce ve tvaru: \'\'\'Y0=A\'.D\'\'\' a \'\'\'Y1=A.D\'\'\'\n\n[[Soubor:Demux_schema.png]]\n\nAčkoliv to z výše popsaného zapojení demultiplexoru nemusí být na první pohled patrné, může obvod plnit též funkci dekodéru, který převádí jednobitové binární číslo (ze vstupu A) na kód 1 ze 2. Vstup D můžeme chápat jako vstup uvolnění, tj. vstup, který aktivuje nebo blokuje funkci dekodéru. Bude-li tento vstup v log.0, bude na obou výstupech log.0 bez ohledu na úroveň na vstupu A. V opačném případě se bude obvod chovat jako dekodér. Toto platí zcela obecně i pro demultiplexory s více výstupy (a tudíž více adresovými vstupy). Demultiplexor se totiž z principu chová jako dekodér s tím rozdílem, že logická úroveň na aktivovaném výstupu závisí na úrovni na datovém vstupu D. Jako demultiplexor lze tedy použít dekodér z binárního kódu na kód 1 z n za předpokladu, že obvod disponuje vstupem (vstupy) uvolnění, na který připojíme multiplexovaný signál.\n\n----\n\n\n=====Kodér=====\nKodér je kombinační logický obvod, který převádí vstupní kód 1 z n (tj. kód, ve kterém je v daném okamžiku vždy aktivní pouze jeden bit/vstup) na jiný typ binárního kódu, typicky buď na standardní binární kód (BIN) nebo některý z kódů BCD. Funkce kodéru je inverzní k funkci dekodéru.\n\nKodéry lze použít pro redukci počtu vodičů, které jsou potřeba k připojení určitého zařízení (např. k mikrokontroléru). Typickým příkladem mohou být klávesnice. Např. klávesnici s šestnácti tlačítky lze s využitím kodéru propojit s mikrokontrolérem pouhými čtyřmi vodiči (namísto šestnácti v případě, že bychom připojovali každé tlačítko na samostatný vývod mikrokontroléru, nebo osmi při multiplexním zapojení). Podle mě je to dobré pro kódování signálu ze vstupních zařízení (jako klávesnice, kde s tím uživatel může něco dělat). Je možné definovat v jaké hodnotě je vstup aktivní, nejednou to je logická nula.\n\n[[Soubor:Prav_tab_koder.png]]\n\n======Jak takovou věc udělat?======\nNa obrázku je pravdivostní tabulka kodéru 1 ze 4 s aktivním vstupem v logické nule. Tato pravdivostní tabulka musí být celá implementována v kodéru, jelikož se často nejedná o funkci, která to nějak vypočítá, ale spíš o definované hodnoty - musíme je tam definovat, aby věděl, jaké číslo má vyplivnout (v případě softwarového kodéru, možná si to pamatujete tusím z IMP nebo čeho)\n\nPokud si chcete udělat vlastní kodér (hardwarový), tak musíte najít funkce, které vám na základě vstupu vyplivnou požadovaný výstup. To se dělá pomocí Karnaughových map. Tato mapa je pro kodér, který je definovaný pravdivostní tabulkou na obrázku. Ale věřím, že vůbec nechcete vědet jak se to skládá, a dolu na obrázku z toho nějak vyčarovali funkce. Když jsou, poskládat to jde dobře. \n\n[[Soubor:Karnaughova_mapa.png]]\n\nKarel má v otázkách ke všemu ještě VHDL kód pro danou součástku, jestli chcete, dám to tam, ale kód snad chtít nebudou a toto se podle mě pamatuje líp. Ale pokud bychom to chtěly vědět pořádně, musím zjistit jak fungují Karnaughovy mapy. A jak ji udělat z pravdivostní tabulky a jak vyčarovat funkce. Ale speciálně pro vás jsem z té sračky nakreslila schéma, jak to má vypadat!\n\n[[Soubor:Encoder.png]]\n\n======K čemu je to dobré?======\nPředstavte si rádio, které má osm stanic. Taky má pro každou stanici vlastní čudlik, a logicky může byt zaplý jen jeden. Můžete si říct, že tam proste stačí multiplexor, který ta rádia bude přepínat. Částečně ano, ale bude prostě jen přehrávat danou stanici, ale neví jakou. Tento multiplexor však potřebuje tři řídící vstupy. Na ty připojíme kodér se třemi výstupy (a tedy maximálně osmi vstupy, protože větší číslo než osm na třech bitech nezakódujeme). Ale naše rádio má osm stanic a osm čudliku, takže kodér bude mít osm vstupů. Každý s nich představuje jeden čudlik. Kodér většinou převádí kód 1 z n, tzn. jen jeden z daných vstupů je aktivní, a ten se zakóduje do jiného čísla. V tomto případě každý čudlik má svůj vlastní kód, který kodér vygeneruje, a který řekne multiplexeru, kterou stanici tam má dát.\n\n[[Soubor:radio.png]]\n\n======Prioritní kodér======\nNekdy nelze zajistit, že se na vstupech kodéru nevyskytne některá z 11ti možných kombinací hodnot, které nejsou definovány pravdivostní tabulkou, která je na obrázku. Těch 11 možných znamená, že je aktivní více než jeden vstup. Z hlediska funkce kodéru to sice nedává smysl, a nemělo by to být, ale kdyby taková situace nastala, je vhodné definovat chování kodéru.\n\nA to řeší prioritní kodér. U prioritního kodéru se v případě, že je aktivováno více vstupů současně, na výstupu vybere binární číslo, které odpovídá aktivovanému vstupu s nejvyšší prioritou, přičemž priorita je dána pořadovým číslem vstupu (tj. např. priorita vstupu A3 je vyšší než priorita vstupu A1, takže pokud bude na obou log. 0, na výstupu bude binárně vyjádřené číslo 3 a nikoliv 1). Tímto způsobem jsou definovány hodnoty výstupů pro všechny vstupní kombinace.\n\n[[Soubor:Prav_tab_prikoder.png]]\n\n----\n\n\n=====Dekodér=====\nBinární dekodér je kombinační logický obvod, který převádí binárně kódované n-bitové číslo na (obvykle) 2^n výstupů kódovaných jako 1 z 2^n. Binární dekodér má tedy n vstupů a 2^n výstupů, z nichž je v daném okamžiku vždy aktivní pouze jeden, přičemž číslo aktivního výstupu odpovídá hodnotě vstupního binárního čísla. Binární dekodér použijeme např. v případech, kdy potřebujeme zobrazit hodnotu binárního čísla pomocí samostatných LED, vybrat sloupec nebo řádek maticového displeje apod.\n\nJinými slovy, je to naprosto to samé jako kodér, ale dělá to opačnou funkci, vstupem u dekodéru je zakódované číslo, obvykle binární nebo BCD, a které bývá výstupem kodéru. Výstupem dekodéru je naopak číslo 1 z n, které bylo vstupem kodéru.\n\nPravdivostní tabulka dekodéru 1 z 4:\n\n[[Soubor:Prav_tab_decoder.png]]\n\nSchéma zapojení takového dekodéru:\n\n[[Soubor:Decoder.png]]\n\n----\n\n\n=====Rekodér=====\nJe to kombinační obvod, který převádí jeden typ binárního kódu na jiný (např. převodník z binárního kódu na kód BCD nebo naopak apod.). Používá se také pro převod BCD na 7-segment. U rekodéru není přešně určeno, co se na co převádí jako u kodéru nebo dekodéru.\n\n----\n\n\n=====Binární sčítačka=====\nBinární sčítačka je kombinační logický obvod, jehož vstupem jsou dvě binární čísla a jehož výstupem je součet těchto čísel opět v binárním tvaru. Protože je operace sčítání základní operací ve výpočetní technice, je binární sčítačka přítomna v aritmeticko-logické jednotce (ALU) každého mikroprocesoru. Ačkoliv se nepředpokládá, že byste si sčítačku museli konstruovat z logických hradel sami, zapojení binární sčítačky ukazuje, že i složité kombinační systémy jsou sestaveny z elementárních logických prvků.\n\n======Jednobitová poloviční sčítačka======\nJednobitová sčítačka slouží ke sčítání dvou binárních čísel vyjádřených jediným bitem. V nejjednodušší verzi má takový obvod dva vstupy (A a B) a dva výstupy, které označujeme Y a Co. Popsaný obvod nazýváme poloviční jednobitovou sčítačkou. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_pol_scitacka.png]]\n\nVýsledek součtu čísel A a B je k dispozici na výstupu Y, zatímco výstup Co označujeme jako přenos (angl. carry, v tomto případě carry out). Došlo-li při sčítání k přetečení, výstup Co přenese tuto informaci do dalšího sčítacího členu, který zpracovává vyšší bity vstupních čísel. \n\n[[Soubor:Pol_scitacka_schema.png]]\n\n======Jednobitová úplná sčítačka======\nAbychom mohli realizovat vícebitovou sčítačku, musíme obvod rozšířit o další vstup, který označíme Ci (carry in). Tento vstup bude přenášet informaci o přetečení z předchozího sčítacího členu. Takovou sčítačku pak nazveme úplnou jednobitovou sčítačkou. Na výstupy CO a Y můžeme též pohlížet jako na výsledek vyjádřený dvěma bity. Jeho funkce je vyjádřena touto pravdivostní tabulkou:\n\n[[Soubor:Prav_tab_uplna_scitacka.png]]\n\nScchéma zapojení jednobitové úplné sčítačky:\n\n[[Soubor:Uplna_scitacka_schema.png]]\n\n======Vícebitová sčítačka======\nVícebitová sčítačka je realizována kaskádním zapojením jednobitových sčítaček.\n\n[[Soubor:Vicebit_scitacka.png]]\n\nAngl. Ripple carry - carry musí procházet přes všechny stupně čítačky. Cenově výhodné řešení, pomalé. Zpoždění je úměrné počtu bitů. Urychlit je to možné použitím paralelní struktury.\n\n----\n\n\n=====ALU=====\nJe to zkratka z angl. Arithmetic-Logic Unit, neboli také aritmeticko-logická jednotka. Patří mezi základní stavební prvky počítače. V ALU se vykonávají všechny aritmetické a logické operace s číslami (operandy) načtenými z operační paměti v pevné řádové čárce. Pro práci s operandy v plovoucí řádové čárce se používá FPU, Floating-Point Unit.\n\nVstupem jsou dva n-bitové operandy A a B. Aritmetická a logická jednotka jsou oddělené.\n\n\'\'\'Aritmetické operace:\'\'\'\n# sčítání\n# odčítání\n# násobení\n# dělení\n# bitový posuv (doprava i doleva)\n# inkrement\n# dekrement\n\n\'\'\'Logické operace:\'\'\'\n# Logický součin - AND\n# Logický součet - OR\n# Negace - NOT\n# NAND\n# NOR\n# XOR\n# porovnání dvou čísel','utf-8'),(1077,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = <m>(3,14)_10</m>\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n10 2 8 16\n\n00 0000 00 0\n\n01 0001 01 1\n\n02 0010 02 2\n\n03 0011 03 3\n\n04 0100 04 4\n\n05 0101 05 5\n\n06 0110 06 6\n\n07 0111 07 7\n\n08 1000 10 8\n\n09 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(1078,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = <m>(3,14)_10</m>\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n 10 2 8 16\n\n 00 0000 00 0\n\n01 0001 01 1\n\n02 0010 02 2\n\n03 0011 03 3\n\n04 0100 04 4\n\n05 0101 05 5\n\n06 0110 06 6\n\n07 0111 07 7\n\n08 1000 10 8\n\n09 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(1079,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• 8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = <m>(3,14)_10</m>\n\n• N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = (3 * 10^0 + 1 * 10^-1 + 4 * 10^-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10\n\n• N = (nk-1 * r^k-1 + nk-2 * r^k-2 + … + n0 * r^0 + n-1 * r^-1 + … + n-l+1 * r^-l+1 + n-l * r^-l)r, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n 10 2 8 16\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n02 0010 02 2\n\n03 0011 03 3\n\n04 0100 04 4\n\n05 0101 05 5\n\n06 0110 06 6\n\n07 0111 07 7\n\n08 1000 10 8\n\n09 1001 11 9\n\n10 1010 12 A\n\n11 1011 13 B\n\n12 1100 14 C\n\n13 1101 15 D\n\n14 1110 16 E\n\n15 1111 17 F\n\n16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: (10011,011)2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375 )10\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože 16 = 2^4). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (8 = 2^3).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n2^8 256\n\n2^7 128\n\n2^6 64\n\n2^5 32\n\n2^4 16\n\n2^3 8\n\n2^2 4\n\n2^1 2\n\n2^0 1\n\n2^-1 1 / 2 0,5\n\n2^-2 1 / 4 0,25\n\n2^-3 1 / 8 0,125\n\n2^-4 1 / 16 0,0625\n\n2^-5 1 / 32 0,03125\n\n2^-6 1 / 64 0,015625\n\n2^-7 1 / 128 0,0078125\n\n2^-8 1 / 256 0,00390625','utf-8'),(1080,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIS) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIS) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ x)( = f x)( v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\nNapříklad generátor exponenciálního rozložení vypočte výsledek vyhodnocením výrazu\n\nyi = A − b ∗ ln (1 − xi)\n\nkde rovnoměrně rozložené xi získáme například vhodným kongruentním generátorem.\n\n===Vylučovací metoda===\nTato metoda pracuje na principu náhodné volby bodu v ploše obdélníku ohraničujícího graf funkce hustoty daného rozložení. Pokud máme generátor rovnoměrného rozložení, můžeme generovat náhodně (s rovnoměrným rozložením) body uvnitř obdélníku o souřadnicích (x, y). Pokud náhodným bodem ”trefíme” plochu pod funkcí hustoty f, vrátíme souřadnici x jako nově vygenerované náhodné číslo. Pokud ”netrefíme”, generujeme další bod a opakujeme tento postup.\n\nIntuitivně lze snadno pochopit, že tam, kde jsou větší hodnoty funkce f je také vyšší pravděpodobnost že zasáhneme plochu a vrátíme x, což přesně koresponduje s větší hustotou pravděpodobnosti výskytu této hodnoty x.\n\n[[Soubor:Vylucovacimetoda.png]]\n\nDůležité je že se musíme trefit do rozsahu a negenerovat body úplně mimo. Funkci hustoty proto ohraničíme obdélníkem, který má výšku M, což je maximální hodnota funkce. Stejně tak se musíme omezit na ose x. (x1 a x2).\n\nZ toho všeho plyne, že metoda není použitelná pro rozložení s nekonečným rozsahem.\n\nVhodné také nejsou funkce hustoty, který zabírají příliš malou část obdélníku, protože se málo často trefujeme a generování pak trvá příliš dlouho.\n\n===Kompoziční metoda===\nVe skriptech z IMS je pouze toto: \n\nPro některá rozložení je možné použít několik různých metod pro různé oblasti funkce hustoty rozložení a výsledek poskládat z těchto komponent. Tato metoda je vhodná pro komplikovanější průběhy funkce hustoty pravděpodobnosti f.','utf-8'),(1081,'(numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel)\n\n//nevím na kolik sem patří soustavy, hodně lidí některé vynechává\n\nDle skript Matematika 3\n=Numerické metody=\n\n==Řešení soustavy lineárních rovnic==\n\nSoustava má libovolný počet rovnic. Elegantně je můžeme zapsat maticí, která má vlevo koeficienty proměnných a vpravo sloupcový vektor pravých stran, který se označuje b. Soustava rovnic v maticovém tvaru se pak zapisuje jako:\n\n Ax = b\n\nBudeme předpokládat, že soustavy jsou regulární => májí každá pouze jedno řešení.\n\n===Přímé metody===\nVedou k řešení v konečném počtu kroků a v případě, že se nedopustíme zaokrouhlovací chyby jsou řešení přesná.\n\n====Cramerovo pravidlo====\nPokud je matice regulární, je její determinant nenulový. \n\nPlatí o ní, že: \n#Její řádky jsou lineárně nezávislé. \n#Její sloupce jsou lineárně nezávislé.\n#Hodnost čtvercové regulární matice o velikosti n×n je právě n.\n\n(lieárně závislé řádky jsou třeba [1,2,3] a [2,4,6] jeden je vynásobený nulou - platí pro libovolnou funkci)\n\nJe vhodné pro malé soustavy s ošklivými koeficienty. U velkých by bylo ptřeba spočítat příliš mnoho determinantů příliš vysokých řádů.\n\n\'\'\'Determinant\'\'\' je součet vynásobení všech prvků matice, tak že zároveň nenásobím dva prvky ze stejného řádku nebo sloupce. (tzv. Každé s každým)\n\nJe potřeba dát pozor na znaménka, když je to zleva doprava směrem dolů je to ok a když zprava doleva tak je potřeba otočit znamínko (odečíst násobek).\n\n\'\'\'Postup:\'\'\'\n\n[[Soubor:Cramer.png]]\n\n====Gausova eliminační metoda====\n\n#K matici soustavy připíšeme vektor pravých stran na konec.\n#Převedeme matici na trojúhelníkový tvar.\n#Z převedené matice získáme novou soustavu. Což je výsledek Gaussovy eliminace.\n#Následuje zpětná substituce, neboli zpětný chod.\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Gaussova-elim.png]]\n\nTato metoda je náchylná na zaokrouhlovací chyby, proto se modifikuje například na eliminaci s výběrem hlavního prvku.\n\n=====Eliminace s výběrem hlavního prvku=====\n\nAbychom omezili zaokrouhlovací chybu u rovnice, které mají koeficienty výrazně odlišných řádů, tak vybíráme pořadí rovnic.\n\nNejprve najdeme rovnici s největší absolutní hodnotou koeficientu a vyměníme ji za rovnici na prvním místě a pomocí jejích násobků eliminujeme x_1, pak dáme na druhý řádek rovnici, která má opět nejvyšší absolutní hodnotu koeficientu a pokračujeme obdobně.\n\nExistují i optimálnější řešení, ale jsou početně/programátorsky náročnější.\n\n===Iterační metody===\nNevedou k přesnému výsledku po konečném počtu kroků.\n\nNa začátku řešení uděláme počáteční aproximaci (odhad) a pak ji v jednotlivých krocích upřesňujeme. Přesného řešení dosáhneme až v limitě. Proto výsledky budou pouze přibližné.\n\n====Jacobiho metoda====\nTeorie je příliš komplikovaná (přiznává i Fajmon).\n\nMetoda konverguje jen v případě, že je sloupcově nebo řádkově ostře dominantní.\n\n\'\'Matice je diagonálně dominantní, právě když absolutní hodnota prvku na diagonále je větší nebo rovna součtu absolutních hodnot ostatních prvků - a to bud pro všechny řádky, nebo pro všechny sloupce. Matice je ostře diagonálně dominantní, jsou-li nerovnosti ostře.\'\'\n\nPostup obecně:\n\n#Z každé rovnice si vyjádříme jednu proměnnou. (Z první x_1 ...)\n#Zcela náhodně si zvolíme počáteční aproximaci pro všechna x a poznačíme je horním indexem (0).\n#Dosadíme počáteční aproximaci do pravé strany soustavy.\n#Vyčíslíme a tak získáme novou aproximaci, kterou označíme horním indexem (1).\n#Pokračujeme dokud nedosáhneme potřebné přesnosti.\n\n\'\'\'Příklad:\'\'\' \n\n[[Soubor:Jacobi.png]]\n\n====Gauss-Seidlova metoda====\nVylepšení Jacobiho metody. Při výpočtu rovnice se použijí už nejnovější hodnoty, takže konverguje rychleji.\n\nKonverguje za stejných podmínek jako Jacobiho, ale také má nové kritérium. \n\nKonverguje pokud je matice soustavy pozitivně definitivní. To se pozná tak, že každý nenulový sloupcový vektor <m>x^T A x > 0</m>\n\nJako nejvhodnější nástroj se pro tento účel jeví [[http://cs.wikipedia.org/wiki/Cholesk%C3%A9ho_rozklad Choleského rozklad]] (délka výpočtu je úměrná a algoritmus je bezpodmínečně zpětně stabilní). Pokud matice není pozitivně definitní, pak dojde v průběhu výpočtu k dělení nulou nebo výpočtu odmocniny ze záporného čísla. Pokud matice pozitivně definitní je, proběhne výpočet Choleského faktoru aniž by tyto situace nastaly.\n\nVe skriptech mi to vysvětlení jak to zjistit \"Od oka\" nic neřeklo. Str 35.\n\n[[Soubor:Pozitivni.png]]\n\n==Řešení nelineárních rovnic==\n===Jedné rovnice===\nGraficky to jsou průsečíky grafů funkcí f(x) a f(y).\n\n\'\'\'Důležitá věta:\'\'\'\nJe-li \'\'\'f(a) * f(b) < 0\'\'\' pak s ev intervalu (a,b) nachází alespoň jeden kořen f(x) = 0. \n\n[[Soubor:Podminkafafb.png]]\n\nTato podmínka říká, že a a b mají opačná znaménka. Řešení se tam může nacházet více a to, že někde tato podmínka neplatí, neznamená, že tam není žádný kořen. \n\n====Půlení intervalu====\nIntuitivně: \n\nvezmeme interval a půlíme ho tak dlouho dokud nebude funkční hodnota v jednom z krajů zmenčujícího se intervalu 0.\n\nChytře:\n\nVezmeme interval (a_0,b_0) takový kde platí \"důležitá podmínka\". Rozpůlíme ho - uprostřed uděláme bod x_0. Platí-li f(x_0) = 0, pak jsme nalezli kořen, pokud jsme nenalezli, tak pokračujeme půlení v té půlce intervalu, která splňuje důležitou podmínku.\n\n[[Soubor:Puleni.png]]\n\nNebo ukončíme v případě dosažení určené přesnosti <m>delim{|}{x_{k} - x_{k-1}}{|} < varepsilon</m>\n\n====Regula falsi====\nPrincip stejný jako při půlení intervalu, jen x_0 není v půlce, ale je na průsečíku sečny funkce vedené z bodu a_0 do b_0.\n\nNa výpočet průsečíku je vzoreček.\n\n<m>x_k = b_k - {{b_k - a_k}/{f(b_k) - f(a_k)} f(b_k)}</m>\n\n[[Soubor:Regulafalsi.png]]\n\n====Metoda sečen====\nVelmi podobná jako regula falsi.\n\nZačátek je stejný, vedeme sečnu z a_0 do b_0, které se tady pojmenovávají x_0 a x_1. Pak vedeme sečnu body x_1 a f(x_1).\n\nPozor tato metoda je sice rychlejší, ale může divergovat a není jednoduché zjistit jestli se to tak stane. Je dobré před zahájením výpočtu určit počet kroků.\n\n[[Soubor:Secny.png]]\n\nTaky má vzoreček na aproximaci kořene.\n\n<m>x_{k+1} = x_k - {{x_k - x_{k-1}}/{f(x_k) - f(x_{k-1})} f(x_k)}</m>\n\n====Newtonova metoda / metoda tečen====\nJe nejefektivnější.\n\nNemusí vždy konvergovat.\n\nBudeme potřebovat derivace.\n\nKonvergenci Newtonovy metody zkontrolujeme \'\'\'Fourierovou podmínkou\'\'\'.\n\n f(x_0) * f´´(x_0) > 0\n\n[[Soubor:Newtonlinear.png]]\n\nNewtonova metoda se dá vysvětlit pomocí Taylorova rozvoje. (skripta str. 46) a ještě je tam zmínka o komplexních kořenech.\n\n====Metoda prosté iterace====\nPři této metodě využijeme tzv. Iterační funkci, značenou g(x). A bude platit, že x_k+1 = g(x_k).\n\nHledáme pevný bod funkce g(x).\n\nMetoda konverguje v případě, že je zobrazení kontraktivní.\n\nU funkce jedné proměnné kontraktivita souvisí s rychlostí růstu funkce.\n\nPlatí:\n\n<m> delim{|}{g prime (x)}{|} <= alpha forall x in <a,b> </m>\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Prostaiterace.png]]\n\n===Soustavy rovnic===\n\n====Prostá iterace====\n\nStejně jako u jedné rovnice vstupuje do hry G. Je to matice parciálních derivací.\n\nMoc se nepoužívá, špatně se hledá vhodná iterační funkce.\n\n====Newtonova metoda====\n\nPříklad za všechno:\n\n[[Soubor:Newtonsoustava.png]]\n\n==Řešení diferenciálních rovnic==\n\nNěkteré rovnice jdou řešit analyticky, na ty ostatní je tu numerická matika! \n\nBude získávat pouze přibližné řešení.\n\nBudeme dostávat pouze řešení v uzlových bodech sítě, které jsou od sebe vzdáleny o vzdálenost jednoho kroku. \n\nKdyž je krok (h) pořád stejný, bavíme se o pravidelné (ekvivalentní síti).\n\nBudeme řešit \"Počáteční úlohy\", ty, které mají počáteční podmínky. Řešení však lze převést na rovnice 1. řádu.\n\n===Eulerova metoda===\n\nKdyž ji miluješ, není co dodat.\n\n[[Soubor:Euler.png]]\n\n====Geometricky====\n # Diferenciální rovnicí je určeno \'\'\'směrové pole\'\'\'. \n\nV každém bodě roviny, kde prochází řešení je hodnota f(x,y) rovna směrnici tečny ke grafu tohoto řešení.\n\nJe to vlastně takový malá šipka, která nám pokaždé řekne kam se dál vydat.\n\n====Modifikace====\n[[Soubor:Modifyeuler2.png]]\n\n===Rungovy-Knuttovy metody===\n\nTěchto metod je více. Ve skriptech je jako nejproslulejší označena ta 4. řádu.\n\n[[Soubor:Rungknutt4.png]]\n\n===Vícekrokové metody===\n\nSpočívají v tom, že jednu metodu počítám pomocí vice předchozích hodnot.\n\nProblém spočívá u několika prvních hodnot, které musím získat jinde. Například jednokrokovou metodou.\n\n[[Soubor:Vicekrokove.png]]\n\nVícekrokové metody můžou být explicitní pokud b_0 = 0 a nebo implicitní pokud tomu tak není. U těch je potřeba v každém kroku počítat\n\n[[Soubor:Vicekrokove2.png]]\n\nExistují také vícekrokové metody založené na numerické integraci.\n\n===prediktor-korektor===\n\nJde o použití vice metod, kde explicitní metodu zjistím hodnotu, kterou upravím explicitní metodou.\n\n===Soustavy===\n\nPoužívají se všechny zmíněné metody, ale pracuje se s vektory.\n\nSoustavy rovnic vyššího řádu se převádějí na soustavy prvního řádu.\n[http://forum.matweb.cz/viewtopic.php?id=22741 Nápověda]\n\n=Pravděpodobnost=\nMáme 4 pravděpodobnostní modely. 2 pro vyjádření pravděpodobností, kde jsou jednotlivé elementární prvky zastoupeny se stejnou pravděpodobností (Klasický a geometrický) a dva pro ty, u kterých to neplatí (Diskrétní a spojitý).\n\nDisjunktní pokrytí množiny Omega Je takové, kde podmnožiny H_k nemají průnik a jejich sjednocení je celá množina omega.\n\n===Klasická===\nPodíl potu příznivých výsledků ku nepříznivým.\n\n<m> P(A) = {delim{|}{A}{|}}/{delim{|}{Omega}{|}}</m>\n\n====Podmíněná pravděpodobnost====\nPodmíněná pravděpodobnost jevu Z, pokud víme, že nastala podmínka S.\n\n<m> P(ZIS) = {delim{|}{Z inter S}{|}}/{delim{|}{S}{|}}</m>\n\nTenhle vzoreček je zkrácený o omegu, který se vyskytuje v čitateli i jmenovateli jako jmenovatel. Můžeme napsat taky:\n\n<m> P(ZIS) = {P(Z inter S)}/{P(S)}</m>\n\nNení to Zia, ale je to Z svislá čára A.\n\n===Geometrická===\nPoužívá se v případě, kdy množina Omega je nespočetná (například je to plocha čtverce) a všechny elementární jevy nastávají se stejnou pravděpodobností.\n\nGeometrickou pravděpodobnost jevu A definujeme jako podíl míry množiny příznivých výsledků (= míra množiny A) a míry množiny všech možných výslekdů (=míry množiny Omega).\n\n<m> P(A) = {m(A)}/{m(Omega)}</m>\n\n===Diskrétní pravděpodobnost===\nDiskrétní pravděpodobnost jevu A definujeme jako součet pravděpodobností těch jevů <m>omega_i</m>, které jsou prvky množiny A.\n\n<m> P(A) = sum{omega_i in A}{}{P omega_i}</m>\n\nPracuje se zde s pojmy \'\'\'pravděpodobnostní funkce\'\'\' a \'\'\'distribuční funkce\'\'\'.\n\n\'\'\'Pravděpodobnostní funkce\'\'\' \n\nnabývá hodnot pouze v diskrétních bodech. Jinde je nulová. Např.:\n\n[[Soubor:Pravfunkce.png]]\n\np(x) je zkrácený zápis P(X = x)\n\n\'\'\'Distribuční funkce\'\'\'\n\nZnačíme F(x) = P(X < x)\n\nHonota funkce F v bodě x je rovna pravděpodobnosti, že náhodná veličina X nabude hodnotz menší než x.\n\nDistribuční funkce je spoojitá a pro diskrétní veličiny má schodovitý tvar. \n\nVelikost změny (Výška schodu) v bodě k je rovna hodnotě p(k).\n\nVelikost schodu se postupně zmenšuje až se limitně blíží nule.\n\n===Spojitá pravděpodobnost===\n\nUrčena pro ty veličiny, které nenabývají diskrétních hodnot. Pravděpodobnost těchto veličin odpovídá \'\'\'spojitému rozdělení pravděpodobnosti\'\'\' (popsáno v další kapitole).\n\nŘeší se pomocí integrálů části obsahu pod gausovou křivkou.\n\nMezi hustotou a distribuční funkcí u spojitého rozdělení pravděpodobnosti platí zajímavý vztah, a sice hustota je derivací distribuční funkce F′ (x) = f (x) v těch bodech x, kde existuje derivace funkce F(x).\n\n==Rozložení pravděpodobnosti==\n\'\'//Nemám sílu už nic přepisovat, není tu žádná zákeřnost. Cituji Pirožkovy materiály.\'\'\n\n===Binomické===\n[[Soubor:Binomicke.png]]\n\n===Poissonovo===\n(Ryba)\n\n[[Soubor:Poissonovo.png]]\n\n===Exponenciální===\n[[Soubor:Exponencialni.png]]\n\n===Rovnoměrné===\n[[Soubor:Rovnomerne.png]]\n\n===Normální===\n(Gausovo)\n\n[[Soubor:Gaus-normlani.png]]\n\n=Generování pseudonáhodných čísel=\n\nPočítače deterministický stroj => generuje deterministická čísla => pouze generátory pseudonáhodných čísel. Na náhodná čísla by musel být speciální HW.\n\nGenerování opravdu náhodných čísel je také velmi pomalé.\n\nZákladem generování pseudonáhodných čísel je dobrý generátor rovnoměrného rozložení v intervalu <0,1). Vygenerovaná čísla se pak převádějí na potřebné rozsahy a rozložení.\n\nVětšina generátorů má periodu - maximální počet vygenerovaných čísel. Pak se začnou opakovat.\n\n\n==Kongruentní generátor==\nZnáme z IMS :)\n\nTento generátor generuje celá čísla s rovnoměrným rozložením v rozsahu 0 ≤ xi < m.\nPro převod na požadovaný rozsah h0,1) musíme výsledek xi+1 dělit modulem m.\n\nxi+1 = (a·xi + b) mod m\n\n# operace mod znamená zbytek po celočíselném dělení,\n# a, b a m jsou vhodně zvolené konstanty.\n\nPři implementaci v C se modulení dělá implicitně.\n\n[[Soubor:Konggen.png]]\n\nVýstup generátoru a = 69069, b = 1, m = 2^32\n\nKdyby tak byl koeficient a = 7 je to velmi špatné, protože u dvou následujících čísel můžeme například pozorovat závislost, pokud je využijeme jako souřadnice x a y. Při zanesení do grafu by to vytvořilo \"pruhy\".\n\n==Mersenne twister==\nVytvořen 1997\nJe lepší a rychlejší, vhodnější pro náročnější simulace.\n\n==Transformace rozložení==\n\nPřevedení čísel vygenerovaných v rozsahu <0,1) na požadovaný a na požadované rozložení se provádí třemi způsoby.\n\n===Inverzní transformace===\nVyužije inverzní funkci k distribuční funkci požadovaného rozložení.\n\n<m> y = F^{-1}(x) </m>\n\nNapříklad generátor exponenciálního rozložení vypočte výsledek vyhodnocením výrazu\n\nyi = A − b ∗ ln (1 − xi)\n\nkde rovnoměrně rozložené xi získáme například vhodným kongruentním generátorem.\n\n===Vylučovací metoda===\nTato metoda pracuje na principu náhodné volby bodu v ploše obdélníku ohraničujícího graf funkce hustoty daného rozložení. Pokud máme generátor rovnoměrného rozložení, můžeme generovat náhodně (s rovnoměrným rozložením) body uvnitř obdélníku o souřadnicích (x, y). Pokud náhodným bodem ”trefíme” plochu pod funkcí hustoty f, vrátíme souřadnici x jako nově vygenerované náhodné číslo. Pokud ”netrefíme”, generujeme další bod a opakujeme tento postup.\n\nIntuitivně lze snadno pochopit, že tam, kde jsou větší hodnoty funkce f je také vyšší pravděpodobnost že zasáhneme plochu a vrátíme x, což přesně koresponduje s větší hustotou pravděpodobnosti výskytu této hodnoty x.\n\n[[Soubor:Vylucovacimetoda.png]]\n\nDůležité je že se musíme trefit do rozsahu a negenerovat body úplně mimo. Funkci hustoty proto ohraničíme obdélníkem, který má výšku M, což je maximální hodnota funkce. Stejně tak se musíme omezit na ose x. (x1 a x2).\n\nZ toho všeho plyne, že metoda není použitelná pro rozložení s nekonečným rozsahem.\n\nVhodné také nejsou funkce hustoty, který zabírají příliš malou část obdélníku, protože se málo často trefujeme a generování pak trvá příliš dlouho.\n\n===Kompoziční metoda===\nVe skriptech z IMS je pouze toto: \n\nPro některá rozložení je možné použít několik různých metod pro různé oblasti funkce hustoty rozložení a výsledek poskládat z těchto komponent. Tato metoda je vhodná pro komplikovanější průběhy funkce hustoty pravděpodobnosti f.','utf-8'),(1082,'Jsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony','utf-8'),(1083,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n#Uspořádání na X - reflexivní, antisymetrická, tranzitivní a ne symetrická, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n#Lineárně uspořádaná množina je uspořádaná množina, která neobsahuje\nnesrovnatelné prvky.\n#Ekvivalence na X - reflexivní, symetrická, tranzitivní\n#Tolerance na X - reflexivní a symetrická (nemusí být tranzitivní)\n#Kvaziuspořádání - reflexivní a tranzitivní\n#Svaz je uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n#Grupa je množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1084,'','utf-8'),(1085,'','utf-8'),(1086,'Jsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n\n===Mikroprocesory===\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n===Mikrokontroléry===\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n===DSP procesory===\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----','utf-8'),(1087,'Jsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n\n===Mikroprocesory===\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n===Mikrokontroléry===\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n===DSP procesory===\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n===Harvardská architektura===\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n===Von Neumannovská architektura===\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).','utf-8'),(1088,'Jsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n\n===Mikroprocesory===\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n===Mikrokontroléry===\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n===DSP procesory===\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n===Harvardská architektura===\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n===Von Neumannovská architektura===\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----','utf-8'),(1089,'Jsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n====AD převodník====','utf-8'),(1090,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\n=====D/A převodník=====','utf-8'),(1091,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...','utf-8'),(1092,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...','utf-8'),(1093,'','utf-8'),(1094,'','utf-8'),(1095,'','utf-8'),(1096,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...','utf-8'),(1097,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...','utf-8'),(1098,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1099,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\n \n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1100,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1101,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1102,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\n=====Asynchronní=====\n======SCI======\n=====Synchronní=====\n======SPI======\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1103,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\n=====Asynchronní=====\n======SCI======\n=====Synchronní=====\n======SPI======\n\n----\n\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1104,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n=====Asynchronní=====\n======SCI======\n=====Synchronní=====\n======SPI======\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1105,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\n======SCI======\n=====Synchronní sériový přenos=====\n======SPI======\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1106,'','utf-8'),(1107,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n=====Synchronní sériový přenos=====\n======SPI======\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1108,'','utf-8'),(1109,'','utf-8'),(1110,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1111,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n=====RS-232=====\nNormu RS-232 (RS = Recommended Standard) přijala počátkem 60. let Electronic Industry Association jako standard pro sériovou komunikaci. I když umožňuje i synchronní komunikaci, dodnes se v drtivé většine používá pro asynchronní. Tento standard přijali téměř všichni výrobci, a tak bylo umožněno propojovat zařízení vyrobené různými firmami.\n\n----\n\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1112,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n\n=====RS-232=====\nNormu RS-232 (RS = Recommended Standard) přijala počátkem 60. let Electronic Industry Association jako standard pro sériovou komunikaci. I když umožňuje i synchronní komunikaci, dodnes se v drtivé většine používá pro asynchronní. Tento standard přijali téměř všichni výrobci, a tak bylo umožněno propojovat zařízení vyrobené různými firmami.\n\n----\n\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1113,'','utf-8'),(1114,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n\n=====RS-232=====\nNormu RS-232 (RS = Recommended Standard) přijala počátkem 60. let Electronic Industry Association jako standard pro sériovou komunikaci. I když umožňuje i synchronní komunikaci, dodnes se v drtivé většine používá pro asynchronní. Tento standard přijali téměř všichni výrobci, a tak bylo umožněno propojovat zařízení vyrobené různými firmami.\n\nV RS-232 bylo definováno pouzití konektorů s 25ti nebo 9ti kolíky (piny)\n\n[[Soubor:Rs232.jpg]]\n\nV současné době se v oblasti osobních počítačů od používání sériového rozhraní RS-232 již téměř definitivně ustoupilo a to bylo nahrazeno výkonnějším Univerzálním sériovým rozhraním (USB). Nicméně v průmyslu je tento standard, především jeho modifikace, velice rozšířen a pro své specifické rysy tomu tak bude i nadále. Na rozdíl od komplexnějšího USB, standard RS-232 pouze definuje, jak přenést určitou sekvenci bitů a nezabývá se už vyššími vrstvami komunikace. V referenčním modelu ISO/OSI tak představuje pouze fyzickou vrstvu.\n\n----\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1115,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n\n=====RS-232=====\nNormu RS-232 (RS = Recommended Standard) přijala počátkem 60. let Electronic Industry Association jako standard pro sériovou komunikaci. I když umožňuje i synchronní komunikaci, dodnes se v drtivé většine používá pro asynchronní. Tento standard přijali téměř všichni výrobci, a tak bylo umožněno propojovat zařízení vyrobené různými firmami.\n\nV RS-232 bylo definováno pouzití konektorů s 25ti nebo 9ti kolíky (piny)\n\n[[Soubor:Rs232.jpg]]\n\nV současné době se v oblasti osobních počítačů od používání sériového rozhraní RS-232 již téměř definitivně ustoupilo a to bylo nahrazeno výkonnějším Univerzálním sériovým rozhraním (USB). Nicméně v průmyslu je tento standard, především jeho modifikace, velice rozšířen a pro své specifické rysy tomu tak bude i nadále. Na rozdíl od komplexnějšího USB, standard RS-232 pouze definuje, jak přenést určitou sekvenci bitů a nezabývá se už vyššími vrstvami komunikace. V referenčním modelu ISO/OSI tak představuje pouze fyzickou vrstvu.\n\n----\n\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'); INSERT INTO `text` VALUES (1116,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n\n=====RS-232=====\nNormu RS-232 (RS = Recommended Standard) přijala počátkem 60. let Electronic Industry Association jako standard pro sériovou komunikaci. I když umožňuje i synchronní komunikaci, dodnes se v drtivé většine používá pro asynchronní. Tento standard přijali téměř všichni výrobci, a tak bylo umožněno propojovat zařízení vyrobené různými firmami.\n\nV RS-232 bylo definováno pouzití konektorů s 25ti nebo 9ti kolíky (piny)\n\n[[Soubor:Rs232.jpg]]\n\nV současné době se v oblasti osobních počítačů od používání sériového rozhraní RS-232 již téměř definitivně ustoupilo a to bylo nahrazeno výkonnějším Univerzálním sériovým rozhraním (USB). Nicméně v průmyslu je tento standard, především jeho modifikace, velice rozšířen a pro své specifické rysy tomu tak bude i nadále. Na rozdíl od komplexnějšího USB, standard RS-232 pouze definuje, jak přenést určitou sekvenci bitů a nezabývá se už vyššími vrstvami komunikace. V referenčním modelu ISO/OSI tak představuje pouze fyzickou vrstvu.\n\n----\n\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n----\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1117,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 06, 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 24, 28\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28 (90%), 29, 30, 31 (10, 26, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1118,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24, 28\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28 (90%), 29, 30, 31 (10, 26, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1119,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10_3 + 4 * 10_2 + 5 * 10_1 + 6 * 10_0.</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = <m>(3,14)_10</m>\n\n• <m>N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = <m>(3 * 10_0 + 1 * 10_-1 + 4 * 10_-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10</m>\n\n• <m>N = (nk-1 * r_k-1 + nk-2 * r_k-2 + … + n0 * r^0 + n-1 * r_-1 + … + n-l+1 * r_-l+1 + n-l * r_-l)r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n 10 2 8 16\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)2 ⇒ (1 * 2_4 + 0 * 2_3 + 0 * 2_2 … )2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2_4 + 0 * 2_3 + 0 * 2_2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375)10</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2_4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2_3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2_8</m> 256\n\n <m>2_7</m> 128\n\n <m>2_6</m> 64\n\n <m>2_5</m> 32\n\n <m>2_4</m> 16\n\n <m>2_3</m> 8\n\n <m>2_2</m> 4\n\n <m>2_1</m> 2\n\n <m>2_0</m> 1\n\n <m>2_-1</m> 1 / 2 0,5\n\n <m>2_-2</m> 1 / 4 0,25\n\n <m>2_-3</m> 1 / 8 0,125\n\n <m>2_-4</m> 1 / 16 0,0625\n\n <m>2_-5</m> 1 / 32 0,03125\n\n <m>2_-6</m> 1 / 64 0,015625\n\n <m>2_-7</m> 1 / 128 0,0078125\n\n <m>2_-8</m> 1 / 256 0,00390625','utf-8'),(1120,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0.</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = <m>(3,14)_10</m>\n\n• <m>N = (nk-1 nk-2 … n1 n0 , n-1 n-2 … n-l)r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = <m>(3 * 10_0 + 1 * 10_-1 + 4 * 10_-2)10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)10</m>\n\n• <m>N = (nk-1 * r_k-1 + nk-2 * r_k-2 + … + n0 * r^0 + n-1 * r_-1 + … + n-l+1 * r_-l+1 + n-l * r_-l)r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n 10 2 8 16\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:(9267)10 = (1001 0010 0110 0111)b, (9)10 = (1001)2, (2)10 = (0010)2, (6)10 = (0110)2, (7)10 = (0111)2\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: (1563)10 = (11000011011)2 )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: (0,6875)10 = (0,1011)2 )\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)2 ⇒ (1 * 2_4 + 0 * 2_3 + 0 * 2_2 … )2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2_4 + 0 * 2_3 + 0 * 2_2 … )2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )10 ⇒ (19,375)10</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2_4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2_3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2_8</m> 256\n\n <m>2_7</m> 128\n\n <m>2_6</m> 64\n\n <m>2_5</m> 32\n\n <m>2_4</m> 16\n\n <m>2_3</m> 8\n\n <m>2_2</m> 4\n\n <m>2_1</m> 2\n\n <m>2_0</m> 1\n\n <m>2_-1</m> 1 / 2 0,5\n\n <m>2_-2</m> 1 / 4 0,25\n\n <m>2_-3</m> 1 / 8 0,125\n\n <m>2_-4</m> 1 / 16 0,0625\n\n <m>2_-5</m> 1 / 32 0,03125\n\n <m>2_-6</m> 1 / 64 0,015625\n\n <m>2_-7</m> 1 / 128 0,0078125\n\n <m>2_-8</m> 1 / 256 0,00390625','utf-8'),(1121,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π = <m>(3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} … n_1 n_0 , n_{-1} n_{-2} … n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, ni je číslice (nk-1 nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π = <m>(3 * 10_0 + 1 * 10_{-1} + 4 * 10_{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + … + n_0 * r^0 + n_{-1} * r^{-1} + … + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n 10 2 8 16\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n 1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n 2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n 3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n 4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )_2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )_{10} ⇒ (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1122,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• <m>π = (3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} ... n_1 n_0 , n_{-1} n_{-2} ... n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, <m>n_i</m> je číslice (<m>n_{k-1}</m> nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• <m>π = (3 * 10_0 + 1 * 10_{-1} + 4 * 10_{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + ... + n_0 * r^0 + n_{-1} * r^{-1} + ... + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n \'\'\'10 2 8 16\'\'\'\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 ⇒ (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2 ⇒ (1 * 16 + 0 * 8 + 0 * 4 … )_{10} ⇒ (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1123,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π<m> = (3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} ... n_1 n_0 , n_{-1} n_{-2} ... n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, <m>n_i</m> je číslice (<m>n_{k-1}</m> nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π<m> = (3 * 10^0 + 1 * 10^{-1} + 4 * 10^{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + ... + n_0 * r^0 + n_{-1} * r^{-1} + ... + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n \'\'\'10 2 8 16\'\'\'\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 = (1 * 2^4 + 0 * 2^3 + 0 * 2^2 … )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2 = (1 * 16 + 0 * 8 + 0 * 4 ...)_{10} = (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1124,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π<m> = (3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} ... n_1 n_0 , n_{-1} n_{-2} ... n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, <m>n_i</m> je číslice (<m>n_{k-1}</m> nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π<m> = (3 * 10^0 + 1 * 10^{-1} + 4 * 10^{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + ... + n_0 * r^0 + n_{-1} * r^{-1} + ... + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n \'\'\'10 2 8 16\'\'\'\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce napravo je LSB (Least Significant Bit) a nejvíce nalevo je MSB (Most Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 = (1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2 = (1 * 16 + 0 * 8 + 0 * 4 ...)_{10} = (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1125,'== ZNAČKOVACÍ JAZYKY ==\n\n• Jsou nástrojem pro vkládání dodatečných informací do běžného textu. Umí zpracovat části obecného a části strukturovaného textu, který je určen pro zpracování počítačem. Obecný text převládá a speciální části jsou ohraničeny (u klasického programovacího jazyka je to přesně naopak).\n\n• Jsou založeny na gramatice, která je definována jako konečná množina gramatických pravidel, které generují řetězce daného jazyka.\n\n==== PROCEDURÁLNÍ ZNAČKA ====\n\n• Definuje pro prvek konkrétní akci, která se má s prvkem provést (vycentrovat, nastavit velikost písma…) a má pevný význam (sémantiku). Na tomto principu funguje HTML.\n\n==== DEKLARATIVNÍ (UNIVERZÁLNÍ) ZNAČKA ==== \n\n• Definuje prvek jako logickou část v rámci značkovaného textu (jde o jméno, telefon osoby…), význam značky není přesně daný a až při zpracování se bere ze souboru, kde je definovaný. \n\n• Takto funguje XML a vyžaduje pak DTD (Document Type Definition), který definuje výslednou strukturu dokumentu. To umožňuje hromadné zpracování textu a nezávislé zpracování částí textu. Velmi snadno lze také detekovat poškozené nebo neúplné části.\n\n• SGML (Standars Generalized Markup Language) je značkovací metajazyk umožňující definovat značkovací jazyky jako svoje vlastní podmnožiny (vchází z něj HTML, DocBook a další). Jeho základní vlastnosti jsou: upřednostňuje deklarativní značkování, umožňuje definovat typy dokumentů a je nezávislý na technickém vybavení počítače.\n\n----\n\n== HTML (HYPERTEXT MARKUP LANGUAGE) ==\n\n• HTML je typem dokumentu SGML, kde je značkám přiřazena sémantika hypertextového dokumentu v prostředí webu (WWW – World Wide Web).\n\n• Výsledná aplikace používá další formální jazyky, jako jsou skriptovací jazyky (JavaScript), kaskádové styly dokumentů (CSS) a další (např. pro kódování různých jazyků).\n\n==== PRAVIDLA HTML ====\n\n• Jednotlivé značky (tagy) jsou ohraničeny úhlovými závorkami (“<” a “>”). \n\n• Existují otevírací (<h1>) a uzavírací značky (</h1>), které dohromady tvoří element (prvek) dokumentu.\n\n• Některé značky jsou nepárové a píšou se jako <img …> nebo <img … />, <br> nebo <br/> - další řádek. \n\n• Dále obsahují atributy, které zpřesňují vlastnosti elementu a píšou se ve formátu atribut=“hodnota“ a oddělují se mezerami - <form action=\"skript.php\" method=\"get\"> ... \n\n• Elementy mohou být vnořené.\n\n====== STRUKTURA DOKUMENTU ======\n\n• Deklarace \'\'\'DTD\'\'\' (povinná až od verze 4.01) - <!DOCTYPE … >.\n\n• \'\'\'KOŘENOVÝ ELEMENT\'\'\' reprezentující celý dokument - <html> … </html>.\n\n• \'\'\'HLAVIČKA\'\'\' dokumentu obsahující metadata, která určují vlastnosti celého dokumentu (název, jazyk, kódování, <style> - odkaz na CSS soubor se stylem…) - <head> … </head>.\n\n• \'\'\'TĚLO\'\'\' dokumentu obsahující vlastní text - <body> … </body>.\n\n====== ZNAČKY (TAGY) ======\n\n• \'\'\'STRUKTURÁLNÍ ZNAČKY\'\'\' rozvrhují strukturu dokumentu.\n\n<h1>, <h2>, … - nadpisy\n\n<p> - odstavec, <span> - úsek textu, <div> - oddíl textu\n\n<ol> - číslovaný seznam, <ul> - odrážkový seznam, <li> - položka seznamu\n\n<table> - tabulka, <tr> - řádek tabulky, <td> - buňka tabulky, <th> - hlavička tabulky\n\n<frame> - rám (umožňuje rozdělit okno prohlížeče na několik částí zobrazující různé stránky)\n\n• \'\'\'POPISNÉ (SÉMANTICKÉ) ZNAČKY\'\'\' popisují povahu obsahu elementu.\n\n<title>, <adress>, <q> - citace …\n\n• \'\'\'STYLISTICKÉ ZNAČKY\'\'\' určují vzhled elementu. Je snaha tyto značky nahradit CSS souborem, který popisuje vzhled dokumentu odděleně od jeho textu, protože oddělení způsobí, že jde vlastnost elementu změnit jen na jednom místě v textu a text HTML souboru se pak lépe zpracovává i jinými způsoby než při zobrazení na obrazovce počítače (mobilní telefony, tisk, alternativní prohlížeče pro postižené…).\n\n<b> - tučné písmo, <i> - kurzíva, <b> - podtržení\n\n• \'\'\'ZNAČKY FORMULÁŘE\'\'\' dovede HTML zpracovat a prvky vykreslit, jejich další zpracování ale zajišťuje skript serveru (např. PHP).\n\n<form> - formulář, má metody get (posílaná data jsou vidět v řádce prohlížeče) a post (jsou skryta)\n\n<input> - vstup typu text, password (skrývá písmena), radio (kulatý přepínač), checkbox (zatrhávací políčko), submit (odesílací tlačítko)\n\n<textarea> - velké vstupní textové pole\n\n<select> - výběrové pole, <option> - volba v poli\n\n<label> - popis pole\n\n<button> - tlačítko\n\n• <!-- … --> - komentář\n\n• <br> - řádkový zlom\n\n• <hr> - linka\n\n• <img src = “…”> - obrázek\n\n• <a href=”…” > - odkaz\n\n• <?php kód v jazyce php ?>\n\n• <script type=\"text/javascript\"> kód javascriptu </script>, jinak lze použít atribut src pro připojení externího souboru\n\n==== VERZE ====\n\n• HTML4 – popisuje celý dokument včetně vzhledu, zastaralé.\n\n• XHTML – bližší XML, striktnější, některé značky odpadly (<center>, <u>, <font>, …), používá dokument CSS.\n\n• HTML5 – přibyly značky pro sémantické rozdělení dokumentu (<header>, <article> , <section>, <footer>, …) a značky pro video a zvuk pomocí ogg, používá CSS3. Verze je standardizovaná organizací W3C, přesto jsou rozdíly v prohlížečích (především IE). Dokument má stromovou strukturu DOM (na obrázku), s tou lze dynamicky pracovat pomocí JavaScriptu.\n\n[[Soubor:28_DOM.JPG]]\n \n== JAVASCRIPT ==\n\n• Interpretovaný (nemusí se kompilovat) objektově orientovaný skriptovací jazyk (navržen s ohledem na snadné ovládnutí a rychlý a pohodlný vývoj programů).\n\n• Klientská verze je součástí většiny prolížečů.\n\n• Slouží k přidání dynamiky do stránek.\n\n• Jádro jazyka na úrovni syntaxe je podobné C, C++ nebo Javě – jinak ale nemá s Javou nic společného (nejde o jinou verzi Javy). Z jazyka Perl přebírá regulární výrazy a práci s poli.\n\n• Vznikal pod názvem LiveScript, na JavaScript byl přejmenován před uvedením na trh, v produktech Microsoft je někdy jako Jscript nebo ECMAScript. Standard jádra jazyka definovala organizace ECMA.\n\n• Má potlačenou typovou kontrolu.\n\n• Nemá zcela ustálený název ani definici.\n\n• Identifikátory a klíčová slova jsou case-sensitive a používají písmena, čísla, podtržítko a dolar.\n\n• Funguje pouze v prohlížeči a je možné ho zakázat, různé verze prohlížečů vedou k častým chybám. \n\n• Kromě cookies neumí přistupovat k souborům a systémovým objektům ani žádná data uložit.\n\n• Objektovost určuje hlavně uspořádání vlastností a příkazů jazyka. Používá pouze jednoduchou dědičnost. Neexistují třídy, ale používají se konstruktory definované jako Function (tedy jde o funkce) a základní konstruktor Object (vše se dědí z něj).\n\n• Umí použít objekty okna prohlížeče (window), k prvkům stránky HTML (window.document), k zabudovaným objektům (Date, Math, string) a k dalším vytvořeným objektům.\n\n• Příkazy JavaScriptu: jednoduché, výrazové, složené, bloky, podmíněné, přepínač, cykly (break a continue), with (výjimky a jejich zachytávání) a návěští.\n\n• AJAX umožňuje komunikaci se serverem bez nutnosti reloadu stránky (funguje asynchonně – zatímco se jeden požadavek zpracovává, je možné odeslat další).\n\n==== KLIENTSKÝ JAVASCRIPT ====\n\n• Vznikne integrací do prohlížeče, používá objektový model dokumentů DOM (specifikace definovaná organizací W3C – World Web Consorcium, bohužel se moc nepoužívá a vznikají rozdíly v prohlížečích). Použitím DOM lze dosáhnout dynamického chování webových stránek (DHTML – Dynamic HTML).\n\n• Jádro jazyka (obohacené o další knihovny) lze použít i mimo prohlížeče \nnapř. formou Script Hostingu (technologie umožňující MS Windows interpretaci skriptovacích jazyků).\n\n• Globálním objektem je okno prohlížeče Window, prohlížeč generuje události, které indikují chování okna a aktivity uživatele (model programování řízený událostmi – klávesy, pohyb myši…). Všechny globálně deklarované proměnné jsou proměnné okna Window a oproti ostatním objektům má okno méně vlastností. Nejpoužívanějším objektem je pak objekt Document.','utf-8'),(1126,'== ZNAČKOVACÍ JAZYKY ==\n\n• Jsou nástrojem pro vkládání dodatečných informací do běžného textu. Umí zpracovat části obecného a části strukturovaného textu, který je určen pro zpracování počítačem. Obecný text převládá a speciální části jsou ohraničeny (u klasického programovacího jazyka je to přesně naopak).\n\n• Jsou založeny na gramatice, která je definována jako konečná množina gramatických pravidel, které generují řetězce daného jazyka.\n\n==== PROCEDURÁLNÍ ZNAČKA ====\n\n• Definuje pro prvek konkrétní akci, která se má s prvkem provést (vycentrovat, nastavit velikost písma…) a má pevný význam (sémantiku). Na tomto principu funguje HTML.\n\n==== DEKLARATIVNÍ (UNIVERZÁLNÍ) ZNAČKA ==== \n\n• Definuje prvek jako logickou část v rámci značkovaného textu (jde o jméno, telefon osoby...), význam značky není přesně daný a až při zpracování se bere ze souboru, kde je definovaný. \n\n• Takto funguje XML a vyžaduje pak DTD (Document Type Definition), který definuje výslednou strukturu dokumentu. To umožňuje hromadné zpracování textu a nezávislé zpracování částí textu. Velmi snadno lze také detekovat poškozené nebo neúplné části.\n\n• SGML (Standars Generalized Markup Language) je značkovací metajazyk umožňující definovat značkovací jazyky jako svoje vlastní podmnožiny (vchází z něj HTML, DocBook a další). Jeho základní vlastnosti jsou: upřednostňuje deklarativní značkování, umožňuje definovat typy dokumentů a je nezávislý na technickém vybavení počítače.\n\n----\n\n== HTML (HYPERTEXT MARKUP LANGUAGE) ==\n\n• HTML je typem dokumentu SGML, kde je značkám přiřazena sémantika hypertextového dokumentu v prostředí webu (WWW – World Wide Web).\n\n• Výsledná aplikace používá další formální jazyky, jako jsou skriptovací jazyky (JavaScript), kaskádové styly dokumentů (CSS) a další (např. pro kódování různých jazyků).\n\n==== PRAVIDLA HTML ====\n\n• Jednotlivé značky (tagy) jsou ohraničeny úhlovými závorkami (< a >). \n\n• Existují otevírací (<<nowiki />h1>) a uzavírací značky (<<nowiki />/h1>), které dohromady tvoří element (prvek) dokumentu.\n\n• Některé značky jsou nepárové a píšou se jako <<nowiki />img ... > nebo <<nowiki />img ... />, <<nowiki />br> nebo <<nowiki />br/> - další řádek. \n\n• Dále obsahují atributy, které zpřesňují vlastnosti elementu a píšou se ve formátu atribut=“hodnota“ a oddělují se mezerami - <<nowiki />form action=\"skript.php\" method=\"get\"> ... \n\n• Elementy mohou být vnořené.\n\n====== STRUKTURA DOKUMENTU ======\n\n• Deklarace \'\'\'DTD\'\'\' (povinná až od verze 4.01) - <<nowiki />!DOCTYPE ... >.\n\n• \'\'\'KOŘENOVÝ ELEMENT\'\'\' reprezentující celý dokument - <<nowiki />html> ... <<nowiki />/html>.\n\n• \'\'\'HLAVIČKA\'\'\' dokumentu obsahující metadata, která určují vlastnosti celého dokumentu (název, jazyk, kódování, <<nowiki />style> - odkaz na CSS soubor se stylem…) - <<nowiki />head> ... <<nowiki />/head>.\n\n• \'\'\'TĚLO\'\'\' dokumentu obsahující vlastní text - <<nowiki />body> ... <<nowiki />/body>.\n\n====== ZNAČKY (TAGY) ======\n\n• \'\'\'STRUKTURÁLNÍ ZNAČKY\'\'\' rozvrhují strukturu dokumentu.\n\n<<nowiki />h1>, <<nowiki />h2>, ... - nadpisy\n\n<<nowiki />p> - odstavec, <<nowiki />span> - úsek textu, <<nowiki />div> - oddíl textu\n\n<<nowiki />ol> - číslovaný seznam, <<nowiki />ul> - odrážkový seznam, <<nowiki />li> - položka seznamu\n\n<<nowiki />table> - tabulka, <<nowiki />tr> - řádek tabulky, <<nowiki />td> - buňka tabulky, <<nowiki />th> - hlavička tabulky\n\n<frame> - rám (umožňuje rozdělit okno prohlížeče na několik částí zobrazující různé stránky)\n\n• \'\'\'POPISNÉ (SÉMANTICKÉ) ZNAČKY\'\'\' popisují povahu obsahu elementu.\n\n<title>, <adress>, <q> - citace ...\n\n• \'\'\'STYLISTICKÉ ZNAČKY\'\'\' určují vzhled elementu. Je snaha tyto značky nahradit CSS souborem, který popisuje vzhled dokumentu odděleně od jeho textu, protože oddělení způsobí, že jde vlastnost elementu změnit jen na jednom místě v textu a text HTML souboru se pak lépe zpracovává i jinými způsoby než při zobrazení na obrazovce počítače (mobilní telefony, tisk, alternativní prohlížeče pro postižené…).\n\n<b> - tučné písmo, <i> - kurzíva, <b> - podtržení\n\n• \'\'\'ZNAČKY FORMULÁŘE\'\'\' dovede HTML zpracovat a prvky vykreslit, jejich další zpracování ale zajišťuje skript serveru (např. PHP).\n\n<form> - formulář, má metody get (posílaná data jsou vidět v řádce prohlížeče) a post (jsou skryta)\n\n<input> - vstup typu text, password (skrývá písmena), radio (kulatý přepínač), checkbox (zatrhávací políčko), submit (odesílací tlačítko)\n\n<textarea> - velké vstupní textové pole\n\n<select> - výběrové pole, <option> - volba v poli\n\n<label> - popis pole\n\n<button> - tlačítko\n\n• <!-- ... --> - komentář\n\n• <br> - řádkový zlom\n\n• <hr> - linka\n\n• <img src = “...”> - obrázek\n\n• <a href=”...” > - odkaz\n\n• <?php kód v jazyce php ?>\n\n• <script type=\"text/javascript\"> kód javascriptu </script>, jinak lze použít atribut src pro připojení externího souboru\n\n==== VERZE ====\n\n• HTML4 – popisuje celý dokument včetně vzhledu, zastaralé.\n\n• XHTML – bližší XML, striktnější, některé značky odpadly (<center>, <u>, <font>, …), používá dokument CSS.\n\n• HTML5 – přibyly značky pro sémantické rozdělení dokumentu (<header>, <article> , <section>, <footer>, ...) a značky pro video a zvuk pomocí ogg, používá CSS3. Verze je standardizovaná organizací W3C, přesto jsou rozdíly v prohlížečích (především IE). Dokument má stromovou strukturu DOM (na obrázku), s tou lze dynamicky pracovat pomocí JavaScriptu.\n\n[[Soubor:28_DOM.JPG]]\n \n== JAVASCRIPT ==\n\n• Interpretovaný (nemusí se kompilovat) objektově orientovaný skriptovací jazyk (navržen s ohledem na snadné ovládnutí a rychlý a pohodlný vývoj programů).\n\n• Klientská verze je součástí většiny prolížečů.\n\n• Slouží k přidání dynamiky do stránek.\n\n• Jádro jazyka na úrovni syntaxe je podobné C, C++ nebo Javě – jinak ale nemá s Javou nic společného (nejde o jinou verzi Javy). Z jazyka Perl přebírá regulární výrazy a práci s poli.\n\n• Vznikal pod názvem LiveScript, na JavaScript byl přejmenován před uvedením na trh, v produktech Microsoft je někdy jako Jscript nebo ECMAScript. Standard jádra jazyka definovala organizace ECMA.\n\n• Má potlačenou typovou kontrolu.\n\n• Nemá zcela ustálený název ani definici.\n\n• Identifikátory a klíčová slova jsou case-sensitive a používají písmena, čísla, podtržítko a dolar.\n\n• Funguje pouze v prohlížeči a je možné ho zakázat, různé verze prohlížečů vedou k častým chybám. \n\n• Kromě cookies neumí přistupovat k souborům a systémovým objektům ani žádná data uložit.\n\n• Objektovost určuje hlavně uspořádání vlastností a příkazů jazyka. Používá pouze jednoduchou dědičnost. Neexistují třídy, ale používají se konstruktory definované jako Function (tedy jde o funkce) a základní konstruktor Object (vše se dědí z něj).\n\n• Umí použít objekty okna prohlížeče (window), k prvkům stránky HTML (window.document), k zabudovaným objektům (Date, Math, string) a k dalším vytvořeným objektům.\n\n• Příkazy JavaScriptu: jednoduché, výrazové, složené, bloky, podmíněné, přepínač, cykly (break a continue), with (výjimky a jejich zachytávání) a návěští.\n\n• AJAX umožňuje komunikaci se serverem bez nutnosti reloadu stránky (funguje asynchonně – zatímco se jeden požadavek zpracovává, je možné odeslat další).\n\n==== KLIENTSKÝ JAVASCRIPT ====\n\n• Vznikne integrací do prohlížeče, používá objektový model dokumentů DOM (specifikace definovaná organizací W3C – World Web Consorcium, bohužel se moc nepoužívá a vznikají rozdíly v prohlížečích). Použitím DOM lze dosáhnout dynamického chování webových stránek (DHTML – Dynamic HTML).\n\n• Jádro jazyka (obohacené o další knihovny) lze použít i mimo prohlížeče \nnapř. formou Script Hostingu (technologie umožňující MS Windows interpretaci skriptovacích jazyků).\n\n• Globálním objektem je okno prohlížeče Window, prohlížeč generuje události, které indikují chování okna a aktivity uživatele (model programování řízený událostmi – klávesy, pohyb myši…). Všechny globálně deklarované proměnné jsou proměnné okna Window a oproti ostatním objektům má okno méně vlastností. Nejpoužívanějším objektem je pak objekt Document.','utf-8'),(1127,'== ZNAČKOVACÍ JAZYKY ==\n\n• Jsou nástrojem pro vkládání dodatečných informací do běžného textu. Umí zpracovat části obecného a části strukturovaného textu, který je určen pro zpracování počítačem. Obecný text převládá a speciální části jsou ohraničeny (u klasického programovacího jazyka je to přesně naopak).\n\n• Jsou založeny na gramatice, která je definována jako konečná množina gramatických pravidel, které generují řetězce daného jazyka.\n\n==== PROCEDURÁLNÍ ZNAČKA ====\n\n• Definuje pro prvek konkrétní akci, která se má s prvkem provést (vycentrovat, nastavit velikost písma…) a má pevný význam (sémantiku). Na tomto principu funguje HTML.\n\n==== DEKLARATIVNÍ (UNIVERZÁLNÍ) ZNAČKA ==== \n\n• Definuje prvek jako logickou část v rámci značkovaného textu (jde o jméno, telefon osoby...), význam značky není přesně daný a až při zpracování se bere ze souboru, kde je definovaný. \n\n• Takto funguje XML a vyžaduje pak DTD (Document Type Definition), který definuje výslednou strukturu dokumentu. To umožňuje hromadné zpracování textu a nezávislé zpracování částí textu. Velmi snadno lze také detekovat poškozené nebo neúplné části.\n\n• SGML (Standars Generalized Markup Language) je značkovací metajazyk umožňující definovat značkovací jazyky jako svoje vlastní podmnožiny (vchází z něj HTML, DocBook a další). Jeho základní vlastnosti jsou: upřednostňuje deklarativní značkování, umožňuje definovat typy dokumentů a je nezávislý na technickém vybavení počítače.\n\n----\n\n== HTML (HYPERTEXT MARKUP LANGUAGE) ==\n\n• HTML je typem dokumentu SGML, kde je značkám přiřazena sémantika hypertextového dokumentu v prostředí webu (WWW – World Wide Web).\n\n• Výsledná aplikace používá další formální jazyky, jako jsou skriptovací jazyky (JavaScript), kaskádové styly dokumentů (CSS) a další (např. pro kódování různých jazyků).\n\n==== PRAVIDLA HTML ====\n\n• Jednotlivé značky (tagy) jsou ohraničeny úhlovými závorkami (< a >). \n\n• Existují otevírací (<<nowiki />h1>) a uzavírací značky (<<nowiki />/h1>), které dohromady tvoří element (prvek) dokumentu.\n\n• Některé značky jsou nepárové a píšou se jako <<nowiki />img ... > nebo <<nowiki />img ... />, <<nowiki />br> nebo <<nowiki />br/> - další řádek. \n\n• Dále obsahují atributy, které zpřesňují vlastnosti elementu a píšou se ve formátu atribut=“hodnota“ a oddělují se mezerami - <<nowiki />form action=\"skript.php\" method=\"get\"> ... \n\n• Elementy mohou být vnořené.\n\n====== STRUKTURA DOKUMENTU ======\n\n• Deklarace \'\'\'DTD\'\'\' (povinná až od verze 4.01) - <<nowiki />!DOCTYPE ... >.\n\n• \'\'\'KOŘENOVÝ ELEMENT\'\'\' reprezentující celý dokument - <<nowiki />html> ... <<nowiki />/html>.\n\n• \'\'\'HLAVIČKA\'\'\' dokumentu obsahující metadata, která určují vlastnosti celého dokumentu (název, jazyk, kódování, <<nowiki />style> - odkaz na CSS soubor se stylem…) - <<nowiki />head> ... <<nowiki />/head>.\n\n• \'\'\'TĚLO\'\'\' dokumentu obsahující vlastní text - <<nowiki />body> ... <<nowiki />/body>.\n\n====== ZNAČKY (TAGY) ======\n\n• \'\'\'STRUKTURÁLNÍ ZNAČKY\'\'\' rozvrhují strukturu dokumentu.\n\n<<nowiki />h1>, <<nowiki />h2>, ... - nadpisy\n\n<<nowiki />p> - odstavec, <<nowiki />span> - úsek textu, <<nowiki />div> - oddíl textu\n\n<<nowiki />ol> - číslovaný seznam, <<nowiki />ul> - odrážkový seznam, <<nowiki />li> - položka seznamu\n\n<<nowiki />table> - tabulka, <<nowiki />tr> - řádek tabulky, <<nowiki />td> - buňka tabulky, <<nowiki />th> - hlavička tabulky\n\n<<nowiki />frame> - rám (umožňuje rozdělit okno prohlížeče na několik částí zobrazující různé stránky)\n\n• \'\'\'POPISNÉ (SÉMANTICKÉ) ZNAČKY\'\'\' popisují povahu obsahu elementu.\n\n<<nowiki />title>, <<nowiki />adress>, <<nowiki />q> - citace ...\n\n• \'\'\'STYLISTICKÉ ZNAČKY\'\'\' určují vzhled elementu. Je snaha tyto značky nahradit CSS souborem, který popisuje vzhled dokumentu odděleně od jeho textu, protože oddělení způsobí, že jde vlastnost elementu změnit jen na jednom místě v textu a text HTML souboru se pak lépe zpracovává i jinými způsoby než při zobrazení na obrazovce počítače (mobilní telefony, tisk, alternativní prohlížeče pro postižené...).\n\n<<nowiki />b> - tučné písmo, <<nowiki />i> - kurzíva, <<nowiki />b> - podtržení\n\n• \'\'\'ZNAČKY FORMULÁŘE\'\'\' dovede HTML zpracovat a prvky vykreslit, jejich další zpracování ale zajišťuje skript serveru (např. PHP).\n\n<<nowiki />form> - formulář, má metody get (posílaná data jsou vidět v řádce prohlížeče) a post (jsou skryta)\n\n<<nowiki />input> - vstup typu text, password (skrývá písmena), radio (kulatý přepínač), checkbox (zatrhávací políčko), submit (odesílací tlačítko)\n\n<<nowiki />textarea> - velké vstupní textové pole\n\n<<nowiki />select> - výběrové pole, <<nowiki />option> - volba v poli\n\n<<nowiki />label> - popis pole\n\n<<nowiki />button> - tlačítko\n\n• <<nowiki />!-- ... --> - komentář\n\n• <<nowiki />br> - řádkový zlom\n\n• <<nowiki />hr> - linka\n\n• <<nowiki />img src=...> - obrázek\n\n• <<nowiki />a href=... > - odkaz\n\n• <<nowiki />?php kód v jazyce php ?>\n\n• <<nowiki />script type=\"text/javascript\"> kód javascriptu <<nowiki />/script>, jinak lze použít atribut src pro připojení externího souboru\n\n==== VERZE ====\n\n• HTML4 – popisuje celý dokument včetně vzhledu, zastaralé.\n\n• XHTML – bližší XML, striktnější, některé značky odpadly (<<nowiki />center>, <<nowiki />u>, <<nowiki />font>, ...), používá dokument CSS.\n\n• HTML5 – přibyly značky pro sémantické rozdělení dokumentu (<<nowiki />header>, <<nowiki />article>, <<nowiki />section>, <<nowiki />footer>, ...) a značky pro video a zvuk pomocí ogg, používá CSS3. Verze je standardizovaná organizací W3C, přesto jsou rozdíly v prohlížečích (především IE). Dokument má stromovou strukturu DOM (na obrázku), s tou lze dynamicky pracovat pomocí JavaScriptu.\n\n[[Soubor:28_DOM.JPG]]\n \n== JAVASCRIPT ==\n\n• Interpretovaný (nemusí se kompilovat) objektově orientovaný skriptovací jazyk (navržen s ohledem na snadné ovládnutí a rychlý a pohodlný vývoj programů).\n\n• Klientská verze je součástí většiny prolížečů.\n\n• Slouží k přidání dynamiky do stránek.\n\n• Jádro jazyka na úrovni syntaxe je podobné C, C++ nebo Javě – jinak ale nemá s Javou nic společného (nejde o jinou verzi Javy). Z jazyka Perl přebírá regulární výrazy a práci s poli.\n\n• Vznikal pod názvem LiveScript, na JavaScript byl přejmenován před uvedením na trh, v produktech Microsoft je někdy jako Jscript nebo ECMAScript. Standard jádra jazyka definovala organizace ECMA.\n\n• Má potlačenou typovou kontrolu.\n\n• Nemá zcela ustálený název ani definici.\n\n• Identifikátory a klíčová slova jsou case-sensitive a používají písmena, čísla, podtržítko a dolar.\n\n• Funguje pouze v prohlížeči a je možné ho zakázat, různé verze prohlížečů vedou k častým chybám. \n\n• Kromě cookies neumí přistupovat k souborům a systémovým objektům ani žádná data uložit.\n\n• Objektovost určuje hlavně uspořádání vlastností a příkazů jazyka. Používá pouze jednoduchou dědičnost. Neexistují třídy, ale používají se konstruktory definované jako Function (tedy jde o funkce) a základní konstruktor Object (vše se dědí z něj).\n\n• Umí použít objekty okna prohlížeče (window), k prvkům stránky HTML (window.document), k zabudovaným objektům (Date, Math, string) a k dalším vytvořeným objektům.\n\n• Příkazy JavaScriptu: jednoduché, výrazové, složené, bloky, podmíněné, přepínač, cykly (break a continue), with (výjimky a jejich zachytávání) a návěští.\n\n• AJAX umožňuje komunikaci se serverem bez nutnosti reloadu stránky (funguje asynchonně – zatímco se jeden požadavek zpracovává, je možné odeslat další).\n\n==== KLIENTSKÝ JAVASCRIPT ====\n\n• Vznikne integrací do prohlížeče, používá objektový model dokumentů DOM (specifikace definovaná organizací W3C – World Web Consorcium, bohužel se moc nepoužívá a vznikají rozdíly v prohlížečích). Použitím DOM lze dosáhnout dynamického chování webových stránek (DHTML – Dynamic HTML).\n\n• Jádro jazyka (obohacené o další knihovny) lze použít i mimo prohlížeče \nnapř. formou Script Hostingu (technologie umožňující MS Windows interpretaci skriptovacích jazyků).\n\n• Globálním objektem je okno prohlížeče Window, prohlížeč generuje události, které indikují chování okna a aktivity uživatele (model programování řízený událostmi – klávesy, pohyb myši…). Všechny globálně deklarované proměnné jsou proměnné okna Window a oproti ostatním objektům má okno méně vlastností. Nejpoužívanějším objektem je pak objekt Document.','utf-8'),(1128,'','utf-8'),(1129,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28, 29, 30, 31 (10, 26, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1130,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28, 29, 30, 31 (10, 26, 32, 33, 34, 35, 37)\n\nDo otazky 29 nakonec byla pridana podkapitola.\n\n36? :-O\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1131,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18\n\nNeprepsano:\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNaceno:\n\nRozuceno:\n\nZoufalstvi:\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1132,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π<m> = (3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} ... n_1 n_0 , n_{-1} n_{-2} ... n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, <m>n_i</m> je číslice (<m>n_{k-1}</m> nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π<m> = (3 * 10^0 + 1 * 10^{-1} + 4 * 10^{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + ... + n_0 * r^0 + n_{-1} * r^{-1} + ... + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n \'\'\'10 2 8 16\'\'\'\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 1000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce nalevo je MSB (Most Significant Bit) a nejvíce napravo je LSB (Least Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 = (1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2 = (1 * 16 + 0 * 8 + 0 * 4 ...)_{10} = (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1133,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(1%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28, 29, 30, 31 (10, 26, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1134,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).','utf-8'),(1135,'','utf-8'),(1136,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]','utf-8'),(1137,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.','utf-8'),(1138,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.','utf-8'),(1139,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.','utf-8'),(1140,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).','utf-8'),(1141,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).','utf-8'),(1142,'','utf-8'),(1143,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]','utf-8'),(1144,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.','utf-8'),(1145,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======','utf-8'),(1146,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1147,'Toto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].','utf-8'),(1148,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n=Metody řešení úloh=','utf-8'),(1149,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\n\n==Neinformované==\n\n==Informované==','utf-8'),(1150,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\nKritéria pro hodnocení metod řečení úloh\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\n\n==Neinformované==\n\n==Informované==','utf-8'),(1151,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řečení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\n\n==Neinformované==\n\n==Informované==','utf-8'),(1152,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\n\n==Neinformované==\n\n==Informované==','utf-8'),(1153,'','utf-8'),(1154,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\n==Neinformované==\n\n==Informované==','utf-8'),(1155,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\n\n==Informované==','utf-8'),(1156,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 19, 20, 21, 22, 23, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(20%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28, 29, 30, 31 (10, 26, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1157,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 19, 20, 21, 22, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(20%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28, 29, 30, 31 (10, 26, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1158,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 19, 20, 21, 22, 25, 26, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(20%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 27, 28, 29, 30, 31 (10, 26, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1159,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\n\n----\n\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n----\n\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1160,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\n===Prohledávání do šířky (BFS - Breadth First Search)===\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==','utf-8'),(1161,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\n===Prohledávání do šířky (BFS - Breadth First Search)===\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====','utf-8'),(1162,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\n===Prohledávání do šířky (BFS - Breadth First Search)===\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====','utf-8'),(1163,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém).\nDistribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n----\n\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1164,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n----\n\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1165,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\n===Prohledávání do šířky (BFS - Breadth First Search)===\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1166,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n\n======PCI Express======\n\n\n----\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1167,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1168,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1169,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému. Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, kterí nejsou ani v seznamu CLOSED ani ve frontě OPEN, vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1170,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. Jeli tento vybraný uzel \n cílový ukonči prohledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému. Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, kterí nejsou ani v seznamu CLOSED\n ani ve frontě OPEN, vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1171,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1172,'DATOVÉ STRUKTURY\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\nDATOVÝ TYP\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\nVLASTNOSTI\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\nOPERÁTORY\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\nORDINÁLNÍ\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\nSKALÁRNÍ\n\n• REAL – množina desetinných čísel.\n\nABSTRAKTNÍ DATOVÝ TYP (ADT)\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\nSPECIFIKACE\n\nSYNTAX\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\nSÉMANTIKA\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\nUKAZATEL\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\nZÁSOBNÍK\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\nFRONTA\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\nSTRUKTUROVANÝ DATOVÝ TYP\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\nPOLE\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\nSTRING\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\nSTRUKTURA (ZÁZNAM)\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\nVYHLEDÁVACÍ TABULKA\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\nSTROM\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\nBINÁRNÍ STROM\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, počet jehož uzlů je 2n \"1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\nSEZNAM\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\nŘÍDÍCÍ STRUKTURY\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\nPŘÍKAZ\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\nJEDNODUCHÝ PŘÍKAZ\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\nPŘÍKAZY PROCEDURY (FUNKCE)\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\nSTRUKTUROVANÉ PŘÍKAZY\n\n• Všechny lze do sebe zanořovat.\n\nSLOŽENÝ PŘÍKAZ\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\nALTERNATIVNÍ PŘÍKAZY\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\nPŘÍKAZY CYKLU\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1173,'== DATOVÉ STRUKTURY ==\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\n----\n\n==== DATOVÝ TYP ====\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\n====== VLASTNOSTI ======\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\n====== OPERÁTORY ======\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\n====== ORDINÁLNÍ ======\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\n====== SKALÁRNÍ ======\n\n• REAL – množina desetinných čísel.\n\n----\n\n==== ABSTRAKTNÍ DATOVÝ TYP (ADT) ====\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\n====== SPECIFIKACE ======\n\n\'\'\'SYNTAX\'\'\'\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\n[[Soubor:26_01.png]]\n\n\'\'\'SÉMANTIKA\'\'\'\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\n====== UKAZATEL ======\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\n====== ZÁSOBNÍK ======\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\n[[Soubor:26_04.png]]\n\n====== FRONTA ======\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\n[[Soubor:26_05.png]]\n\n----\n\n==== STRUKTUROVANÝ DATOVÝ TYP ====\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\n====== POLE ======\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\n====== STRING ======\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\n====== STRUKTURA (ZÁZNAM) ======\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\n----\n\n==== VYHLEDÁVACÍ TABULKA ====\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n----\n\n==== STROM ====\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\n====== BINÁRNÍ STROM ======\n\n[[Soubor:27_binarni_vyhledavaci_strom.jpg]]\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, počet jehož uzlů je 2n \"1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\n[[Soubor:26_03.png]]\n\n----\n\n==== SEZNAM ====\n\n[[Soubor:26_06.png]]\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n[[Soubor:26_02.png]]\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\n----\n\n== ŘÍDÍCÍ STRUKTURY ==\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\n==== PŘÍKAZ ====\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\n====== JEDNODUCHÝ PŘÍKAZ ======\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\n====== PŘÍKAZY PROCEDURY (FUNKCE) ======\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\n----\n\n==== STRUKTUROVANÉ PŘÍKAZY ====\n\n• Všechny lze do sebe zanořovat.\n\n====== SLOŽENÝ PŘÍKAZ ======\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\n====== ALTERNATIVNÍ PŘÍKAZY ======\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\n====== PŘÍKAZY CYKLU ======\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1174,'','utf-8'),(1175,'','utf-8'),(1176,'','utf-8'),(1177,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální.\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1178,'','utf-8'),(1179,'== DATOVÉ STRUKTURY ==\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\n----\n\n==== DATOVÝ TYP ====\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\n====== VLASTNOSTI ======\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\n====== OPERÁTORY ======\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\n====== ORDINÁLNÍ ======\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\n====== SKALÁRNÍ ======\n\n• REAL – množina desetinných čísel.\n\n----\n\n==== ABSTRAKTNÍ DATOVÝ TYP (ADT) ====\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\n====== SPECIFIKACE ======\n\n\'\'\'SYNTAX\'\'\'\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\n[[Soubor:26_01.png]]\n\n\'\'\'SÉMANTIKA\'\'\'\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\n====== UKAZATEL ======\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\n====== ZÁSOBNÍK ======\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\n[[Soubor:26_04.JPG]]\n\n====== FRONTA ======\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\n[[Soubor:26_05.JPG]]\n\n----\n\n==== STRUKTUROVANÝ DATOVÝ TYP ====\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\n====== POLE ======\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\n====== STRING ======\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\n====== STRUKTURA (ZÁZNAM) ======\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\n----\n\n==== VYHLEDÁVACÍ TABULKA ====\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n----\n\n==== STROM ====\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\n====== BINÁRNÍ STROM ======\n\n[[Soubor:27_07.JPG]]\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, počet jehož uzlů je 2n \"1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\n[[Soubor:26_03.png]]\n\n----\n\n==== SEZNAM ====\n\n[[Soubor:26_06.JPG]]\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n[[Soubor:26_02.png]]\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\n----\n\n== ŘÍDÍCÍ STRUKTURY ==\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\n==== PŘÍKAZ ====\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\n====== JEDNODUCHÝ PŘÍKAZ ======\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\n====== PŘÍKAZY PROCEDURY (FUNKCE) ======\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\n----\n\n==== STRUKTUROVANÉ PŘÍKAZY ====\n\n• Všechny lze do sebe zanořovat.\n\n====== SLOŽENÝ PŘÍKAZ ======\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\n====== ALTERNATIVNÍ PŘÍKAZY ======\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\n====== PŘÍKAZY CYKLU ======\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1180,'','utf-8'),(1181,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1182,'','utf-8'),(1183,'','utf-8'),(1184,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 19, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(20%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1185,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1186,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1187,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1188,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1189,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1190,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1191,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\n===Metody Best first search===\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1192,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 19, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(35%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1193,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1194,'','utf-8'),(1195,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1196,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1197,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1198,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n====Hill-Climbing====\n====Simulované žíhání (Simulated Annealing)====\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1199,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 19, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(50%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1200,'','utf-8'),(1201,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n====Metody založení na generických algoritmech====\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1202,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řečení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1203,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1204,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1205,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\n=Metody hraní her=','utf-8'),(1206,'','utf-8'),(1207,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n=Metody hraní her=','utf-8'),(1208,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 19, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24(75%) (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1209,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:Andor.png]]\n\n=Metody hraní her=','utf-8'),(1210,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:AO.png]]\n\n=Metody hraní her=','utf-8'),(1211,'','utf-8'),(1212,'','utf-8'),(1213,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:AO.png]]\n\nMá i informovanou variantu AO*.\n\n[[Soubor:AOinf.png]]\n\n=Metody hraní her=','utf-8'),(1214,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:AO.png]]\n\nMá i informovanou variantu AO*.\n\n[[Soubor:AOinf.png]]\n\n=Metody hraní her=\n\nHraní her – dva pravidelně se střídající hráči, každý z nich chce vyhrát.\n1. Jednoduché hry – lze prozkoumat/vyšetřit všechny možné tahy (NIM)\n2. Složité ́hry – zkoumá se pouze několik na ́sledujících tahů (Šachy)\n3. Hry s neurčitostí(Vrhcáby)','utf-8'),(1215,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:AO.png]]\n\nMá i informovanou variantu AO*.\n\n[[Soubor:AOinf.png]]\n\n=Metody hraní her=\n\nHraní her – dva pravidelně se střídající hráči, každý z nich chce vyhrát.\n\n1. Jednoduché hry – lze prozkoumat/vyšetřit všechny možné tahy (NIM)\n\n2. Složité ́hry – zkoumá se pouze několik na ́sledujících tahů (Šachy)\n\n3. Hry s neurčitostí(Vrhcáby)','utf-8'),(1216,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky a uzel Next vybere náhodně.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:AO.png]]\n\nMá i informovanou variantu AO*.\n\n[[Soubor:AOinf.png]]\n\n=Metody hraní her=\n\nHraní her – dva pravidelně se střídající hráči, každý z nich chce vyhrát.\n\n1. Jednoduché hry – lze prozkoumat/vyšetřit všechny možné tahy (NIM)\n\n2. Složité ́hry– zkoumá se pouze několik na ́sledujících tahů (Šachy)\n\n3. Hry s neurčitostí(Vrhcáby)\n\n==MiniMax==\n//cite Kalab\n\nJelikož nemáme cílové stavy, je potřeba určit si maximální hloubku stromu. Poté koncové listy tohoto stromu ohodnotíme. Čím vyšší hodnocení, tím lepší stav pro hráče na tahu, čím nižší, tím lepší stav pro oponenta. Při použití CHARu je rozsah 256 hodnot. Maximální hodnota, 127, znamená vítězný tah, minimální hodnota, -127, znamená úplnou prohru.\n\nDva důležité kroky, které je potřeba provést, je výběr všech tahů, které vůbec dávají smysl (například u piškvorek, u hada je tahů tak málo, že se volí všechny) a hlavně zvolení správné heuristické funkce, která bude hodnotit stav po jednotlivých tazích. U tic-tac-toe (piškvorky 3×3) je třeba vhodná heuristika počet trojic, kterými může soupeř zvítězit.\n\nPo ohodnocení listů procházíme strom stejně jako algoritmus DFS. U každého našeho tahu vybíráme z možných hodnot tu nejvyšší, u soupeřova tu nejnižší. Projdeme celý strom, čímž ohodnotíme kořenový uzel. To nám poradí, který tah máme tedy udělat – je to ten, který vede k uzlu se stejnou hodnotou, jako má kořenový uzel.\n\n==Alfa Beta==\nJde o vylepšenou verzi MiniMaxu, která eliminuje procházení větví, u kterých je jasné, že se nestanou. V těchto případech je totiž pro hráče na tahu vždy výhodnější vydat se jinou cestou. \n\nNa začátku alfabety si vytvoříme 2 proměnné: alfa a beta a přiřadíme je kořenovému uzlu. Alfa má hodnotu nejnižší možnou, beta nejvyšší možnou. Pokud v procházení grafu postupujeme směrem dolů, opisujeme alfa a beta do spodního uzlu. Pokud postupujeme směrem nahoru, tak:\n\njestliže jde o náš tah a hodnota beta na listu je vyšší, než hodnota alfa rodičovského prvku, alfu touto betou nahradíme.\njestliže jde o soupeřův tah a hodnota alfa na listu je nižší, než hodnota beta rodičovského prvku, betu touto alfou nahradíme.\nPokud jde o koncový uzel, tak bereme místo alfy/bety jeho ohodnocení.\n\nOptimalizace spočívá v tom, že když se stane, že je alfa větší než beta, můžeme tuto větev opustit a zbylé uzly nekontrolovat. Algoritmus je složité vysvětlit, ale jednoduché pochopit podle ukázky.\n\nhttp://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html java applet na konci.','utf-8'),(1217,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 19, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 23, 24 (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1218,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 24\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(1%) 23, 24 (17, 19, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1219,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(1220,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 07, 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 06, 15, 19\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(1%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05 (06, 07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1221,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 27(50)\n\nNeprepsano:\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNaceno:\n\nRozuceno:\n\nZoufalstvi:\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1222,'','utf-8'),(1223,'','utf-8'),(1224,'','utf-8'),(1225,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1226,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====','utf-8'),(1227,'','utf-8'),(1228,'','utf-8'),(1229,'','utf-8'),(1230,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.','utf-8'),(1231,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.\n\n----\n\n\n====Řadič periferního zařízení====\nStará se o řízení periferních operací','utf-8'),(1232,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n=====Řadič periferního zařízení=====\nStará se o řízení periferních operací. S periferními zařízeními komunikuje řadič PZ přes množinu signálů, která je označována jako rozhraní PZ. Řadič PZ komunikuje s procesorem přes registry řadiče dostupné z procesoru pomocí instrukcí procesoru – do registrů je možné zapisovat, resp. jejich obsah číst. Na základě této informace řídí PZ. Informace uložená v registrech, jíž se řadič řídí při realizaci periferní operace jsou parametry PO. Součástí řadiče je tedy sada registrů, do kterých je možné tyto parametry zapisovat. dále obsahuje komponentu, která se řídí informací zapsanou procesorem do registrů a na základě této informace realizuje periferní operaci. Ta může být realizována např. sekvenčním automatem.\n\nV řadiči nalézá uplatnění i vyrovnávací paměť, jelikož je zde potřeba vyrovnat rozdíl v rychlosti komunikujících zařízení. V komunikaci řadič - PZ může být vyrovnávací pamět fyzicky umístěna jak v řadiči, tak v PZ.\n\n======Stavový a chybový registr======\nStavový registr (někdy označovaný jako chybový registr) je většinou součástí řadiče PZ. Obsahuje indikace o tom, že vznikl nějaký problém buď v PZ nebo řadiči. Součástí stavového registru je většinou bit, který je souhrnnou informací o stavu PZ a řadiče. Pokud je aktivován, je třeba analyzovat slabiky závad, které blíže specifikují typ poruchy/chyby. Slabiky závad periferních zařízení obsahují informaci o stavu logiky, napájecích napětí, mechanických částí, chyb v přenášených datech. Podle složitosti zařízení obsahují slabiky závad různý počet bitů. \n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.\n\n----','utf-8'),(1233,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Řadič periferního zařízení=====\nStará se o řízení periferních operací. S periferními zařízeními komunikuje řadič PZ přes množinu signálů, která je označována jako rozhraní PZ. Řadič PZ komunikuje s procesorem přes registry řadiče dostupné z procesoru pomocí instrukcí procesoru – do registrů je možné zapisovat, resp. jejich obsah číst. Na základě této informace řídí PZ. Informace uložená v registrech, jíž se řadič řídí při realizaci periferní operace jsou parametry PO. Součástí řadiče je tedy sada registrů, do kterých je možné tyto parametry zapisovat. dále obsahuje komponentu, která se řídí informací zapsanou procesorem do registrů a na základě této informace realizuje periferní operaci. Ta může být realizována např. sekvenčním automatem.\n\nV řadiči nalézá uplatnění i vyrovnávací paměť, jelikož je zde potřeba vyrovnat rozdíl v rychlosti komunikujících zařízení. V komunikaci řadič - PZ může být vyrovnávací pamět fyzicky umístěna jak v řadiči, tak v PZ.\n\n======Stavový a chybový registr======\nStavový registr (někdy označovaný jako chybový registr) je většinou součástí řadiče PZ. Obsahuje indikace o tom, že vznikl nějaký problém buď v PZ nebo řadiči. Součástí stavového registru je většinou bit, který je souhrnnou informací o stavu PZ a řadiče. Pokud je aktivován, je třeba analyzovat slabiky závad, které blíže specifikují typ poruchy/chyby. Slabiky závad periferních zařízení obsahují informaci o stavu logiky, napájecích napětí, mechanických částí, chyb v přenášených datech. Podle složitosti zařízení obsahují slabiky závad různý počet bitů. \n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.\n\n----','utf-8'),(1234,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 34, 35, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 07\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(1%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06 (07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31 (10, 32, 33, 34, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1235,'','utf-8'),(1236,'','utf-8'),(1237,'','utf-8'),(1238,'','utf-8'),(1239,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce\n\nOmega - dolní hranice, minimální rychlost růstu funkce\n\nTheta - oznažuje třídu časového chování algoritmu\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(1240,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\n• Na zapamatování těchto pohledů jsme (xproch69 a xsmies00) vytvořily následující pomůcku. Když potkám chlapa, první, co je vidět, je jeho vzhled (struktura). Pokud vypadá dobře, pak mě zajímá, jak se projevuje (chování) a jestli není úplně blbej (v hlavě má nějaká data). Nakonec, když se zadaří, záleží už jen na tom, co má v kalhotech (kompatibilní rozhraní).\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n\'\'\'OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)\'\'\'\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(1241,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π<m> = (3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} ... n_1 n_0 , n_{-1} n_{-2} ... n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, <m>n_i</m> je číslice (<m>n_{k-1}</m> nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π<m> = (3 * 10^0 + 1 * 10^{-1} + 4 * 10^{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + ... + n_0 * r^0 + n_{-1} * r^{-1} + ... + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n \'\'\'10 2 8 16\'\'\'\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 10000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce nalevo je MSB (Most Significant Bit) a nejvíce napravo je LSB (Least Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 = (1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2 = (1 * 16 + 0 * 8 + 0 * 4 ...)_{10} = (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1242,'== ČÍSLO ==\n\n• Je sestaveno z uspořádané množiny symbolů - číslic.\n\n==== ČÍSELNÁ SOUSTAVA ====\n\n• Báze (základ, radix) číselné soustavy definuje maximální počet číslic (nebo i jiných symbolů), které jsou v dané soustavě k dispozici.\n\n==== POLYADICKÁ SOUSTAVA ====\n\n• To je taková soustava, kde je číslo reprezentováno posloupností, ve které se jednotlivé číslice násobí základem soustavy umocněným podle pozice číslice v čísle. \n\n• <m>8456 = 8 * 10^3 + 4 * 10^2 + 5 * 10^1 + 6 * 10^0 .</m>\n\n• Mezi nepolyadické soustavy patří například římská čísla.\n\n==== POZIČNÍ ZÁPIS ====\n\n• π<m> = (3,14)_10</m>\n\n• <m>N = (n_{k-1} n_{k-2} ... n_1 n_0 , n_{-1} n_{-2} ... n_{-l})_r</m>, kde desetinná čárka odděluje celou a desetinnou část čísla, r určuje základ dané číselné soustavy, k počet číslic celočíselné části, l počet číslic desetinné části, <m>n_i</m> je číslice (<m>n_{k-1}</m> nejvyšší významová číslice, n-l nejnižší významová číslice).\n\n==== POLYNOMIÁLNÍ ZÁPIS ====\n\n• π<m> = (3 * 10^0 + 1 * 10^{-1} + 4 * 10^{-2})_10 = (3 * 1 + 1 * 0,1 + 4 * 0,01)_10</m>\n\n• <m>N = (n_{k-1} * r^{k-1} + n_{k-2} * r^{k-2} + ... + n_0 * r^0 + n_{-1} * r^{-1} + ... + n_{-l} + 1 * r^{-l+1} + n_{-l} * r^{-l})_r</m>, s výjimkou desetinné čárky jsou všechny proměnné definovány jako v předchozím odstavci.\n\n----\n\n== ČÍSELNÁ SOUSTAVA ==\n\n==== VÝZNAMNÉ SOUSTAVY ====\n\n \'\'\'10 2 8 16\'\'\'\n\n 00 0000 00 0\n\n 01 0001 01 1\n\n 02 0010 02 2\n\n 03 0011 03 3\n\n 04 0100 04 4\n\n 05 0101 05 5\n\n 06 0110 06 6\n\n 07 0111 07 7\n\n 08 1000 10 8\n\n 09 1001 11 9\n\n 10 1010 12 A\n\n 11 1011 13 B\n\n 12 1100 14 C\n\n 13 1101 15 D\n\n 14 1110 16 E\n\n 15 1111 17 F\n\n 16 10000 20 10\n\n\'\'\'DESÍTKOVÁ (DEKADICKÁ)\'\'\'\n\n• Je používána jako základní kvůli počtu lidských prstů.\n\n\'\'\'DVOJKOVÁ (BINÁRNÍ)\'\'\'\n\n• Je výhodná pro použití počítačem, protože jejich implementace je snadná a většina počítačů používá logické brány, které vrací 0 (vypnuto) a 1 (zapnuto).\n\n• Používá pouze dvě číslice (0 a 1), jednotlivé číslice nazýváme bity (4 bity – nibble, 8 – byte, 16 – word, 32 – doubleword, 1024 – kilobyte kB, kB * 1000 – megabyte MB, MB * 1000 – gigabyte GB, x * 1024 je pak KiB, MiB nebo GiB).\n\n• Číslice nejvíce nalevo je MSB (Most Significant Bit) a nejvíce napravo je LSB (Least Significant Bit).\n\n\'\'\'OSMIČKOVÁ (OKTALOVÁ) A ŠESTNÁCTKOVÁ (HEXADECIMÁLNÍ)\'\'\'\n\n• Hodí se na zobrazování vícebitových binárních čísel, protože jejich základ je mocninou dvou, takže je snadné mezi těmito soustavami a dvojkovou převádět a zmenšení počtu symbolů vede k lepší přehlednosti.\n\n----\n\n==== BCD ZÁPIS ====\n\n• Zápis BCD (Binary Coded Decimal) vyjadřuje číslo desítkové soustavy zapsané v dvojkové soustavě tak, že je každá číslice vyjádřena jako čtveřice nul a jedniček. \nPř.:<m>(9267)_{10} = (1001 0010 0110 0111)_b, (9)_{10} = (1001)_2, (2)_{10} = (0010)_2, (6)_{10} = (0110)_2, (7)_{10} = (0111)_2</m>\n\n----\n\n==== PŘEVODY MEZI SOUSTAVAMI ====\n\n\'\'\'METODA DĚLENÍ ZÁKLADEM (METODA POSTUPNÉHO DĚLENÍ)\'\'\'\n\n• Postupně dělíme číslo v soustavě A základem soustavy B a zaznamenáváme zbytek po celočíselném dělení tak dlouho, dokud není výsledkem dělení 0. Př.: (Výsledek je ODSPODU: <m>(1563)_{10} = (11000011011)_2</m> )\n\n1) (1563)10 / 2 = 781 zb. 1 ⇒ 1 (nejpravější LSB)\n\n2) (781)10 / 2 = 390 zb. 1 ⇒ 1\n\n3) (390)10 / 2 = 195 zb. 0 ⇒ 0\n\n4) (195)10 / 2 = 97 zb. 1 ⇒ 1\n\n5) (97)10 / 2 = 48 zb. 1 ⇒ 1\n\n6) (48)10 / 2 = 24 zb. 0 ⇒ 0\n\n7) (24)10 / 2 = 12 zb. 0 ⇒ 0 \n\n8) (12)10 / 2 = 6 zb. 0 ⇒ 0\n\n9) (6)10 / 2 = 3 zb. 0 ⇒ 0\n\n10) (3)10 / 2 = 1 zb. 1 ⇒ 1\n\n11) (1)10 / 2 = 0 zb. 1 ⇒ 1 (nejlevější MSB)\n\n• Tato metoda je určena pro převod celých čísel mezi soustavami.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = 0;\n while (cislocele <> 0)\n {\n an = cislocele mod z;\n cislocele = cislocele div z;\n n = n + 1;\n }\n </nowiki>\n\n\'\'\'METODA NÁSOBENÍ ZÁKLADEM\'\'\'\n\n• Postupně násobíme číslo v soustavě A základem soustavy B a zaznamenáváme hodnotu, která je před desetinnou čárkou, tak dlouho, dokud není výsledkem dělení 0. V každém kroku znova násobíme zbytek po odečtení hodnoty výsledné cifry. Př.: (Výsledek je ODSPODU: <m>(0,6875)_{10} = (0,1011)_2</m>)\n\n1) (0,6875)10 * 2 = 1,375 = 1 + 0,375 ⇒ 1 (nejpravější LSB)\n\n2) (0,375)10 * 2 = 0,75 = 0 + 0,75 ⇒ 0\n\n3) (0,75)10 * 2 = 1,5 = 1 + 0,5 ⇒ 1\n\n4) (0,5)10 * 2 = 1,0 = 1 + 0,0 ⇒ 1 (nejlevější MSB)\n\n• Určena pro převod desetinných čísel.\n\n• Ne vždy je možné převést číslo z jedné soustavy do jiné beze zbytku, chyba klesá s počtem kroků při převodu. Případná chyba vzniklá oseknutím a zahozením části čísla se nazývá Truncation Error.\n\n• Zápis v pseudokódu:\n\n <nowiki>\n n = -1;\n while (n > -m)\n {\n pom = necelecislo * z;\n an = trunc(pom);\n necelecislo = pom – an;\n n = n – 1;\n }\n </nowiki>\n\n\'\'\'SUBSTITUČNÍ METODA\'\'\'\n\n1) Nejdříve vyjádříme číslo polynomem v soustavě A.\n\nPř.: <m>(10011,011)_2 = (1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2</m>\n\n2) Výpočet pak provedeme aritmetikou soustavy B.\n\nPř.: <m>(1 * 2^4 + 0 * 2^3 + 0 * 2^2 ... )_2 = (1 * 16 + 0 * 8 + 0 * 4 ...)_{10} = (19,375)_{10}</m>\n\n• Protože zpravidla neumíme počítat s jinou soustavou než s desítkovou, používá se tato metoda pro převod z různých soustav do desítkové. Hodí se i na převod desetinných čísel.\n\n\'\'\'PŘEVOD MEZI SOUSTAVAMI SE ZÁKLADEM, KTERÝ JE MOCNINOU DVOJKY\'\'\'\n\n• Z dvojkové do šestnáctkové převedeme tak, že rozsekáme číslo po čtyřech bitech (v případě, že počet cifer není dělitelný čtyřmi, přidáme nuly zleva) a převedeme každou čtveřici na jeden znak šestnáctkové soustavy (4 jsou protože <m>16 = 2^4</m>). Podobně můžeme převádět z dvojkové soustavy na osmičkovou použitím tří bitů (<m>8 = 2^3</m>).\n\n• Pochopitelně stejně to jde i zpět (převedu každý symbol na příslušný počet bitů).\n\n----\n\n== TABULKA HODNOT ==\n \n <m>2^8</m> 256\n\n <m>2^7</m> 128\n\n <m>2^6</m> 64\n\n <m>2^5</m> 32\n\n <m>2^4</m> 16\n\n <m>2^3</m> 8\n\n <m>2^2</m> 4\n\n <m>2^1</m> 2\n\n <m>2^0</m> 1\n\n <m>2^{-1}</m> 1 / 2 0,5\n\n <m>2^{-2}</m> 1 / 4 0,25\n\n <m>2^{-3}</m> 1 / 8 0,125\n\n <m>2^{-4}</m> 1 / 16 0,0625\n\n <m>2^{-5}</m> 1 / 32 0,03125\n\n <m>2^{-6}</m> 1 / 64 0,015625\n\n <m>2^{-7}</m> 1 / 128 0,0078125\n\n <m>2^{-8}</m> 1 / 256 0,00390625','utf-8'),(1243,'=====Techniky urychlování výpočtů v HW=====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n======Řetezené zpracování======\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru','utf-8'),(1244,'','utf-8'),(1245,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n\n[[Soubor:Vzorec.png]]','utf-8'),(1246,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]','utf-8'),(1247,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním','utf-8'),(1248,'','utf-8'),(1249,'','utf-8'),(1250,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]','utf-8'),(1251,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků','utf-8'),(1252,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků\n\n----\n\n\n\'\'\'Konflikty u řetězeného zpracování v procesorech, které mohou vést ke zpomalení linky:\'\'\'\n# \'\'\'Strukturální\'\'\' – obvodová struktura neumožňuje současné provedení určitých akcí – např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU.\n# \'\'\'Datové\'\'\' – když jsou zapotřebí data z předcházející instrukce, která není dokončena.\n# \'\'\'Řídicí\'\'\' – když skoková instrukce mění obsah PC, nebo jiné.\n\n\n\n\'\'\'Řešení těchto problémů:\'\'\'\n# \'\'\'Strukturální\'\'\' - rozdělit paměť na paměť instrukcí a paměť dat. Obecné řešení je například přidání výpočetních jednotek procesoru.\n# \'\'\'Datové\'\'\' - řešením může být \'\'\'bypassing\'\'\' - poskytnutí mezivýsledku dřív, než bude zapsán do registru. Je to umožněno přidáním speciálních datových cest\n# \'\'\'Řídící\'\'\' - problémy se skokovými instrukcemi. Možná řešení:\n## Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu.\n## Nelze-li takové užitečné instrukce najít, vložit NOPy (no operation).\n## Predikce skoku, rozpracovat pouze predikovanou možnost.\n## Rozpracovat obě možnosti pokračování skokové instrukce.\n\nU všech skoků je třeba zrychlit zjištění cílové adresy – k tomu se používá malá paměť cache pro uložení cílových adres (BTB – Branch Target Buffer), která se postupně naplňuje a aktualizuje. Pro nepodmíněné skoky a pro správně predikované podmíněné skoky se zřetězená linka nepozastaví.','utf-8'),(1253,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\nŘetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech. Pokud použijeme zřetězené zpracování v procesoru, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů.\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků\n\n----\n\n\n\'\'\'Konflikty u řetězeného zpracování v procesorech, které mohou vést ke zpomalení linky:\'\'\'\n# \'\'\'Strukturální\'\'\' – obvodová struktura neumožňuje současné provedení určitých akcí – např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU.\n# \'\'\'Datové\'\'\' – když jsou zapotřebí data z předcházející instrukce, která není dokončena.\n# \'\'\'Řídicí\'\'\' – když skoková instrukce mění obsah PC, nebo jiné.\n\n\n\n\'\'\'Řešení těchto problémů:\'\'\'\n# \'\'\'Strukturální\'\'\' - rozdělit paměť na paměť instrukcí a paměť dat. Obecné řešení je například přidání výpočetních jednotek procesoru.\n# \'\'\'Datové\'\'\' - řešením může být \'\'\'bypassing\'\'\' - poskytnutí mezivýsledku dřív, než bude zapsán do registru. Je to umožněno přidáním speciálních datových cest\n# \'\'\'Řídící\'\'\' - problémy se skokovými instrukcemi. Možná řešení:\n## Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu.\n## Nelze-li takové užitečné instrukce najít, vložit NOPy (no operation).\n## Predikce skoku, rozpracovat pouze predikovanou možnost.\n## Rozpracovat obě možnosti pokračování skokové instrukce.\n\nU všech skoků je třeba zrychlit zjištění cílové adresy – k tomu se používá malá paměť cache pro uložení cílových adres (BTB – Branch Target Buffer), která se postupně naplňuje a aktualizuje. Pro nepodmíněné skoky a pro správně predikované podmíněné skoky se zřetězená linka nepozastaví.','utf-8'),(1254,'== SOUBOR ==\n\n• Základní organizační jednotka pro uchovávání dat na discích a jiných médiích.\n\n• SOUBOROVÝ SYSTÉM – souhrn pravidel definujících chování a vlastnosti souborů a možnosti jejich logické organizace (do adresářů) a konkrétní uložení dat a dalších potřebných informací na fyzickém médiu.\n\n• ALOKAČNÍ BLOK – nejmenší jednotka, s kterou je souborový systém schopen pracovat. Limitována zařízením - např pevný disk má velikost sektoru 512B, ale spíše se používají větší – 4KB nebo násobek 4KB.\n\n• METADATA – souhrn informací uložených o souboru společně s jeho daty.\n\n==== ATRIBUTY SOUBORU ====\n\n• JMÉNO – délka 8 – 255 znaků, case-sensitive nebo více jmen v Unixu, většinou má název a příponu.\n\n• VELIKOST – počet bajtů uložených v souboru (menší než skutečně potřebný prostor + informace o souboru).\n\n• ČASOVÉ INFORMACE – čas a datum vytvoření, poslední modifikace.\n\n• IDENTIFIKACE VLASTNÍKA – pro kontrolu oprávnění a kontrolu dostupného místa.\n\n• OPRÁVNĚNÍ PŘÍSTUPU – definují seznam osob s oprávněním číst, zapisovat nebo spustit soubor.\n\n• UMÍSTĚNÍ – příslušnost k adresáři.\n\n==== OPERACE NAD SOUBOREM ====\n\n• Vytvoření souboru – alokuje se prostor pro soubor, vytvoří se položka s jeho jménem v adresáři. Dočasné soubory, které jsou vytvořeny pro běžící program, někdy ani nezískají pozici v seznamu souborů a jsou něčím přepsány poté, co program skončí. Musí proběhnout atomicky (buďto celé nebo vůbec).\n\n• Čtení dat – mohou být ve vyrovnávací paměti (nedávno čtené) nebo na fyzickém disku (pak se do vyrovnávací paměti zkopírují).\n\n• Zápis dat – opět využívá vyrovnávací paměť, ale data se odtud periodicky kopírují na disk a někdy se překopírují kvůli získání místa ve vyrovnávací paměti. Je mnohem pomalejší než čtení, protože musí číst i zapisovat.\n\n• Změna pozice v souboru – pro efektivnější práci existuje funkce určující pozici čtení/zápisu v souboru.\n\n• Smazání souboru – zruší se záznam v adresáři, uvolní se datové bloky souboru pro pozdější použití.\n\n==== TYPY SOUBORU ====\n\n• Blokový speciální soubor – zpřístupňuje ovladač blokového zařízení. Mívá svou vyrovnávací paměť.\n\n• Znakový speciální soubor – zpřístupňuje ovladač znakového zařízení (sériového portu, zvukové karty), komunikuje po bajtech.\n\n• Unixový socket – umožňuje lokální komunikaci pomocí rozhraní pro síťové sockety.\n\n• Pojmenovaná roura – obdoba běžné roury (pipe) umožňující komunikaci vice procesům.\n\n• Symbolický odkaz – nese v sobě jméno libovolného jiného souboru.\n\n====== ŘÍZENÍ PŘÍSTUPU ======\n\n• r – právo čtení – pro běžný soubor povoluje operaci otevření souboru v režimu čtení. Pro adresář umožní přístup k položkám.\n\n• w – právo zápisu – pro běžný soubor povoluje operaci otevření souboru pro zápis. Pro adresář právo modifikovat jeho obsah, tedy (vytvářet, přejmenovávat a rušit položky v adresáři).\n\n• x – právo spustit daný soubor\n\n• t – tzv. sticky bit – pokud je nastaven u souboru je ignorován, zde měl význam u starších systémů, stále se však používá u adresářů, kde zajišt’uje, že smazat soubor může pouze jeho vlastník (u /tmp).\n\n• s – tzv. SUID respektive SGID (set user ID / group ID) právo, v tomto případě spíše příznak, určuje, že proces, který vznikne spuštěním souboru s tímto právem bude mít UID respektive GID nastaveno nikoliv podle uživatele/skupiny, která proces vytvořila ale podle vlastníka/skupiny dané tímto spustitelným souborem.\n\n----\n \n== ADRESÁŘE ==\n\n• Základní organizační jednotka pro hierarchickou organizaci souborů.\n\n• KOŘENOVÝ ADRESÁŘ – v hierarchii na nejvyšším místě (dále aktuální a nadřazený). K souboru vede cesta (oddělovače / či \\).\n\n• Vyhledání souboru – prohledává se strom, náročné, proto se používá cache.\n\n• Výpis obsahu adresáře – buďto postupně vypisuje údaje položek (souborů a podadresářů) nebo pracuje rekurzivně.\n\n• Připojení adresáře (mount – v Unixu) – operace umožňuje kořenový adresář určitého souborového systému umístit namísto obsahu zvoleného adresáře (původní obsah je skryt až do použití umount). Pro připojení zadáváme zařízení a lokální adresář (přípojný bod – mount point).\n\n==== DISKOVÉ SYSTÉMY ====\n\n• RAID = Redundant Array of Independent (Inexpensive) Discs. Několik fyzických disků (stejné kapacity a nejlépe od stejného výrobce) tvoří jeden logický. \n\n====== ÚROVNĚ ======\n\n• RAID0 (stripping) – bloky dat jsou rozděleny mezi jednotlivé disky (pak první blok je na prvním disku, druhý na druhém, třetí na prvním…). Zvyšuje výkon a datový tok.\n\n• RAID1 (mirror) – bloky dat jsou zopakovány na všech discích. Výrazně zvyšuje spolehlivost, zrychluje čtení, používá většinou 2-3 disky.\n\n• RAID2 – blok je rozdělen po bitech mezi disky, z dat se počítá kontrolní součet. Odolný proti výpadku disků, velmi pomalé.\n\n• RAID3 – kromě detekce chyby (jako RAID2) umí i opravu, využívá informaci od řadiče disku.\n\n• RAID4 – jako RAID0, ale používá větší kusy bloku a počítá jim paritu.\n\n• RAID5 – používá paritu, která je rozdělena na disky společně s daty. Používá minimálně 3 disky (max. cca 7, pak se disky ničí).\n\n• RAID6 – používá dva paritní disky, minimálně 4 (max cca 14).\n\n==== LVM (LOGICAL VOLUME MANAGER) ====\n\n• Softwarová vrstva vytvářející logické disky z dostupných fyzických.\n\n• Dostupné disky jsou rozděleny na alokační bloky tzv. PE (PHYSICAL EXTENTS) o velikosti řádově jednotky MB. \n\n• PE jsou zpřístupněny do skupiny svazku tzv. VG (VOLUME GROUP). Tj. zásobník dostupného fyzického prostoru v podobě PE. \n\n• Zařízení pro souborový systém vytvoříme v podobě logického svazku LV (LOGICAL VOLUME). V rámci jeho konfigurace určujeme velikost (kolik PE se pro něj má vyhradit) a způsob alokace alokačních bloků PE.\n\n==== ALGORITMY SPRÁVY VOLNÉHO A OBSAZENÉHO MÍSTA ====\n\n• Fragmentace:\n\n• EXTERNÍ FRAGMENTACE – časem vznikají posloupnosti volných míst (malé oblasti) a využitých míst.\n\n• INTERNÍ FRAGMENTACE – vzniká nevyužité místo v posledním alokačním bloku.\n\n• Správa volných alokačních bloků:\n\n• BITOVÝ VEKTOR – každý bit určuje, zda je blok obsazen nebo ne. Nalezení volného (první jednička) může probíhat velmi rychle, ale vyžaduje paměť na uložení vektoru.\n\n• VÁZANÝ SEZNAM – volné bloky jsou zřetězené. Nalezení volného je jen přístup na začátek seznamu.\n\n====== SOUVISLÁ ALOKACE ======\n\n• Předpokládá, že každý soubor je na disku uložen v po sobě jdoucích blocích. \n\n• Relativně velký výkon, minimalizace pohybu čtecích hlav.\n\n• Problémem je vyhledání volného místa a prodlužování stávajících, vzniká externí fragmentace.\n \n====== ALOKACE POMOCÍ EXTENT ======\n\n• Rozšíření souvislé alokace, zvyšuje výkon.\n\n• Při vytvoření nového souboru je alokována souvislá sekvence bloku zvaná extent.\n\n• Až soubor překročí velikost jednoho extentu, je na jiném vhodném místě alokován další extent. \n\n• Pro jeden soubor je nutno udržovat seznam extentů spolu s informací o jejich uložení. \n\n====== ALOKACE POMOCÍ SEZNAMU ======\n\n• Snaží se řešit problém externí fragmentace.\n\n• V každém bloku na konci je odkaz na další blok.\n\n• Zhoršuje výkon. Pro každý kousek souboru ho musí přečíst celý.\n\n====== ALOKACE POMOCÍ INDEXŮ A STROMŮ ======\n\n• Vytváří datovou strukturu zvanou i-uzel (inode). Tato struktura obsahuje jak všechny atributy souboru, tak adresy všech diskových bloků souboru. Velikost uzlu bývá zvolena tak, aby její násobek byl roven velikosti alokačního bloku souborového systému nebo použitého zařízení.\n\n• Lze efektivně zvětšovat maximální velikost souboru v podstatě na libovolnou hodnotu.\n\n==== VFS (VIRTUAL FILESYSTEM) ====\n\n• Stabilní rozhraní pro přístup k souborovým systémům. Umožňuje aplikacím přistupovat k různým souborových systémů jednotně.\n\n• Definuje jednotlivé operace a jejich parametry a určuje, co musí tvůrce souborového systému implementovat (operace, sémantika).\n\n• Umožňuje existence vice souborových systémů.\n\n==== ŽURNÁLOVACÍ SOUBOROVÉ SYSTÉMY ====\n\n• ŽURNÁL – speciální soubor pro záznam modifikovaných metadata před jejich zápisem na disk.\n\n• Žurnál je pro ochranu prováděné transakce využíván následujícím způsobem:\n\n1) Do žurnálu je zapsáno, co a kde se bude měnit.\n\n2) Je provedena vlastní série změn.\n\n3) Do žurnálu je zapsáno, že operace byla úspěšně dokončena.\n\n4) Záznam v žurnálu je zrušen.\n\n• NTFS, JFS, ZFS, XFS…\n\n----\n\n== VIRTUÁLNÍ PAMĚŤ ==\n\n• Logický adresový prostor (LAP), někdy též virtuální adresový prostor je množina všech adres použitelných procesem.\n\n• Fyzický adresový prostor (FAP) je pamět’ový prostor daný použitou operační pamětí RAM v počítači. FAP je v běžném počítači jen jeden a je společně používán procesy i jádrem operačního systému.\n\n• Systém virtuální paměti musí zajistit, aby při provádění procesu každý přístup na platnou adresu do LAP automaticky zajistil přítomnost požadovaných dat ve fyzické paměti, kde s nimi procesor může manipulovat. Zpřístupnění fyzické paměti se provádí tzv. mapováním logických adres na fyzické.\n\n• Jednotlivé části LAP se do FAP mapují až podle potřeby (on demand).\n\n==== SEGMENTACE ====\n\n[[Soubor:34_01.JPG]]\n\n• LAP tvořen několika segmenty (oblastmi paměti obecně různé velikosti do limitu daného rozsahem adres (offsetu) v segmentu). Program při tomto způsobu musí obsahovat informace, ve kterém segmentu leží požadovaná data nebo kód.\n\n• Náročnější na programátora než stránkování na žádost, může způsobovat fragmentaci fyzické paměti, prakticky se nepoužívá.\n\n==== STRÁNKOVÁNÍ NA ŽÁDOST ====\n\n[[Soubor:34_02.JPG]]\n\n• Provádí mapování po stránkách (nejmenší jednotka přidělování paměti procesu a její velikost musí být mocninou 2).\n\n• Adresový prostor si lze představit jako pole stránek, kde indexy odpovídají číslu stránky.\n\n• LAP i FAP jsou rozděleny na stejně velké stránky. Stránce ve FAP obvykle říkáme rámec (frame). Stránka je nejmenší jednotkou pro kterou lze nastavit ochranu paměti (právo číst, zapisovat, provádět kód) a sdílení paměti mezi procesy.\n\n• Důležitou vlastností tohoto systému virtuální paměti je to, že proces se nemusí starat o mapování LAP na FAP, protože toto mapování je transparentně (tj. pro proces neviditelně) zajišt’ováno kombinací technického vybavení (hardware, HW) a jádra OS.\n\n• Implementačně složité, vyžaduje vyšší režii, v současnosti to používají všechny moderní víceúlohové systémy.\n\n====== PRINCIP ======\n\n1) Přístup do paměti \n\nPředpokládáme příkaz a=1; který překladač přeloží například na instrukci mov [LA],1 kde LA je logická adresa globální neinicializované proměnné a typu int. Při provádění instrukce pošle CPU tuto logickou adresu LA na adresovou sběrnici.\n\n2) Překlad adresy\n\nNa adresové sběrnici je připojena MMU (v textu dále), která transformuje logickou adresu LA na fyzickou adresu FA, která je dále předávána operační paměti (RAM). Při překladu LA na FA může dojít k výpadku stránky – neplatný odkaz do paměti (přerušení procesoru – reakce na to je součástí jádra OS).\n\n3) Obsluha výpadku stránky\n\n Kontrola, zda neodkazujeme mimo přidělený prostor.\n\n A – Alokace rámce (získá adresu volného rámce a přidělí ji procesu).\n\n B – Naplnění rámce daty (celá stránka je inicializována na nulu a poté naplněna daty).\n\n C – Aktualizace tabulky stránek (aktualizuje se záznam v tabulce stránek příslušného procesu).\n\n D – převedení procesu do stavu připraven.\n\n====== TABULKY STRÁNEK ======\n\n• Tabulka stránek je datová struktura, která umožní rychlé vyhledání záznamu podle zadaného čísla logické stránky. Typicky je podobná poli, které je indexované číslem logické stránky.\n\n• Záznam obsahuje: příznak přítomnosti stránky ve FAP, číslo rámce ve FAP, kde je obsah stránky, přístupová práva a další údaje pro potřeby virtuální paměti (např. dirty bit – příznak modifikace stránky).\n\n• Jednoúrovňové – pro každý proces je třeba tabulka s velkým počtem položek.\n\n[[Soubor:34_03.JPG]]\n\n• Víceúrovňové hierarchické tabulky stránek jsou rozděleny na menší části indexované menší tabulkou, která také může být rozdělena atd. Typicky se používají na 32bitových architekturách. \n\n[[Soubor:34_04.JPG]]\n\n• Hashované – indexování pomocí hashovací funkce (dostane číslo stránky a dle fce ho převede na index). V položkách tabulky je uloženo i číslo logické stránky. Používá se v některých 64 bitových systémech.\n\n• Invertované – existuje pouze jedna tabulka pro FAP (pro každý rámec definuje, který proces do nˇej má namapovánu kterou stránku), vyhledává se index pozice záznamu v tabulce. Problematická implementace sdílení stránek.\n \n====== MMU (MEMORY MANAGEMENT UNIT - PŘEKLAD ADRES) ======\n\n• Počítačová komponenta zodpovědná za zpracování přístupů k paměti, o které žádá CPU (Central Processing Unit).\n\n• Překládá virtuální adresu na fyzickou adresu, dále obsahuje nástroje pro ochranu dat, kontrolu cache a další.\n\n1) Pokud není bit přítomnosti nastaven – MMU vyvolá přerušení (PageFault) a žádný přístup do paměti neproběhne.\n\n2) Pokud je bit přítomnosti nastaven a stránka má vyhovující přístupová práva, provede MMU překlad LA na FA. Překlad znamená kopii dolních N bitů logické adresy (pro velikost stránky 2N) a do zbývajících horních bitů výsledné FA je okopírováno číslo rámce z aktuální položky tabulky stránek. Výsledná FA je odeslána na adresovou sběrnici operační paměti (RAM).\n\n• TLB (Translation Look-aside Buffer) je asociativní pamět’, do které jsou ukládány dvojice (klíč,hodnota), kde klíčem je číslo logické stránky a hodnotou je odpovídající položka tabulky stránek. Slouží ke zrychlení práce MMU.\n \n====== ODKLÁDÁNÍ STRÁNEK ======\n\n• Systém virtuální paměti musí řešit problém s jeho přeplněním, proto musí systém virtuální paměti odkládat některé stránky do speciální odkládací paměti – obvykle na disk. Tím se uvolní místo pro nové požadavky. Existuje lokální odkládání (v rámci procesu) a globální odkládání (bez ohledu na proces, kterému patří stránka).\n\n• Stránky, které proces potřebuje v určitém časovém intervalu tvoří PRACOVNÍ MNOŽINU stránek. Počet stránek v pracovní množině bývá podstatně menší než celkový počet stránek používaných procesem za celou dobu jeho běhu. To dovoluje udržovat ve fyzické paměti jen potřebné stránky a dynamicky přidávat/odebírat další stránky podle potřeb procesu.\n\n• Mají-li programy jen malý počet stránek současně mapovaných do FAP, říká se, že mají dobrou LOKALITU ODKAZŮ.\n\n• Typicky jsou používány varianty algoritmu LRU (Least Recently Used) - nejdéle nepoužitá stránka je vybrána k odstranění z FAP. Případně jde použít FIFO (a další jako 2nd chance, LFU, MFU …).\n\n• Odkládání na disk vyžaduje speciální pamět’ (disková oblast nebo soubor) pro ukládání obsahu stránek. Tato oblast je obvykle nazývána SWAP.','utf-8'),(1255,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 07, 35\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(1%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06 (07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34 (10, 32, 33, 35, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1256,'','utf-8'),(1257,'','utf-8'),(1258,'','utf-8'),(1259,'','utf-8'),(1260,'== SOUBOR ==\n\n• Základní organizační jednotka pro uchovávání dat na discích a jiných médiích.\n\n• SOUBOROVÝ SYSTÉM – souhrn pravidel definujících chování a vlastnosti souborů a možnosti jejich logické organizace (do adresářů) a konkrétní uložení dat a dalších potřebných informací na fyzickém médiu.\n\n• ALOKAČNÍ BLOK – nejmenší jednotka, s kterou je souborový systém schopen pracovat. Limitována zařízením - např pevný disk má velikost sektoru 512B, ale spíše se používají větší – 4KB nebo násobek 4KB.\n\n• METADATA – souhrn informací uložených o souboru společně s jeho daty.\n\n==== ATRIBUTY SOUBORU ====\n\n• JMÉNO – délka 8 – 255 znaků, case-sensitive nebo více jmen v Unixu, většinou má název a příponu.\n\n• VELIKOST – počet bajtů uložených v souboru (menší než skutečně potřebný prostor + informace o souboru).\n\n• ČASOVÉ INFORMACE – čas a datum vytvoření, poslední modifikace.\n\n• IDENTIFIKACE VLASTNÍKA – pro kontrolu oprávnění a kontrolu dostupného místa.\n\n• OPRÁVNĚNÍ PŘÍSTUPU – definují seznam osob s oprávněním číst, zapisovat nebo spustit soubor.\n\n• UMÍSTĚNÍ – příslušnost k adresáři.\n\n==== OPERACE NAD SOUBOREM ====\n\n• Vytvoření souboru – alokuje se prostor pro soubor, vytvoří se položka s jeho jménem v adresáři. Dočasné soubory, které jsou vytvořeny pro běžící program, někdy ani nezískají pozici v seznamu souborů a jsou něčím přepsány poté, co program skončí. Musí proběhnout atomicky (buďto celé nebo vůbec).\n\n• Čtení dat – mohou být ve vyrovnávací paměti (nedávno čtené) nebo na fyzickém disku (pak se do vyrovnávací paměti zkopírují).\n\n• Zápis dat – opět využívá vyrovnávací paměť, ale data se odtud periodicky kopírují na disk a někdy se překopírují kvůli získání místa ve vyrovnávací paměti. Je mnohem pomalejší než čtení, protože musí číst i zapisovat.\n\n• Změna pozice v souboru – pro efektivnější práci existuje funkce určující pozici čtení/zápisu v souboru.\n\n• Smazání souboru – zruší se záznam v adresáři, uvolní se datové bloky souboru pro pozdější použití.\n\n==== TYPY SOUBORU ====\n\n• Blokový speciální soubor – zpřístupňuje ovladač blokového zařízení. Mívá svou vyrovnávací paměť.\n\n• Znakový speciální soubor – zpřístupňuje ovladač znakového zařízení (sériového portu, zvukové karty), komunikuje po bajtech.\n\n• Unixový socket – umožňuje lokální komunikaci pomocí rozhraní pro síťové sockety.\n\n• Pojmenovaná roura – obdoba běžné roury (pipe) umožňující komunikaci vice procesům.\n\n• Symbolický odkaz – nese v sobě jméno libovolného jiného souboru.\n\n====== ŘÍZENÍ PŘÍSTUPU ======\n\n• r – právo čtení – pro běžný soubor povoluje operaci otevření souboru v režimu čtení. Pro adresář umožní přístup k položkám.\n\n• w – právo zápisu – pro běžný soubor povoluje operaci otevření souboru pro zápis. Pro adresář právo modifikovat jeho obsah, tedy (vytvářet, přejmenovávat a rušit položky v adresáři).\n\n• x – právo spustit daný soubor\n\n• t – tzv. sticky bit – pokud je nastaven u souboru je ignorován, zde měl význam u starších systémů, stále se však používá u adresářů, kde zajišt’uje, že smazat soubor může pouze jeho vlastník (u /tmp).\n\n• s – tzv. SUID respektive SGID (set user ID / group ID) právo, v tomto případě spíše příznak, určuje, že proces, který vznikne spuštěním souboru s tímto právem bude mít UID respektive GID nastaveno nikoliv podle uživatele/skupiny, která proces vytvořila ale podle vlastníka/skupiny dané tímto spustitelným souborem.\n\n----\n \n== ADRESÁŘE ==\n\n• Základní organizační jednotka pro hierarchickou organizaci souborů.\n\n• KOŘENOVÝ ADRESÁŘ – v hierarchii na nejvyšším místě (dále aktuální a nadřazený). K souboru vede cesta (oddělovače / či \\).\n\n• Vyhledání souboru – prohledává se strom, náročné, proto se používá cache.\n\n• Výpis obsahu adresáře – buďto postupně vypisuje údaje položek (souborů a podadresářů) nebo pracuje rekurzivně.\n\n• Připojení adresáře (mount – v Unixu) – operace umožňuje kořenový adresář určitého souborového systému umístit namísto obsahu zvoleného adresáře (původní obsah je skryt až do použití umount). Pro připojení zadáváme zařízení a lokální adresář (přípojný bod – mount point).\n\n==== DISKOVÉ SYSTÉMY ====\n\n• RAID = Redundant Array of Independent (Inexpensive) Discs. Několik fyzických disků (stejné kapacity a nejlépe od stejného výrobce) tvoří jeden logický. \n\n====== ÚROVNĚ ======\n\n• RAID0 (stripping) – bloky dat jsou rozděleny mezi jednotlivé disky (pak první blok je na prvním disku, druhý na druhém, třetí na prvním…). Zvyšuje výkon a datový tok.\n\n• RAID1 (mirror) – bloky dat jsou zopakovány na všech discích. Výrazně zvyšuje spolehlivost, zrychluje čtení, používá většinou 2-3 disky.\n\n• RAID2 – blok je rozdělen po bitech mezi disky, z dat se počítá kontrolní součet. Odolný proti výpadku disků, velmi pomalé.\n\n• RAID3 – kromě detekce chyby (jako RAID2) umí i opravu, využívá informaci od řadiče disku.\n\n• RAID4 – jako RAID0, ale používá větší kusy bloku a počítá jim paritu.\n\n• RAID5 – používá paritu, která je rozdělena na disky společně s daty. Používá minimálně 3 disky (max. cca 7, pak se disky ničí).\n\n• RAID6 – používá dva paritní disky, minimálně 4 (max cca 14).\n\n==== LVM (LOGICAL VOLUME MANAGER) ====\n\n• Softwarová vrstva vytvářející logické disky z dostupných fyzických.\n\n• Dostupné disky jsou rozděleny na alokační bloky tzv. PE (PHYSICAL EXTENTS) o velikosti řádově jednotky MB. \n\n• PE jsou zpřístupněny do skupiny svazku tzv. VG (VOLUME GROUP). Tj. zásobník dostupného fyzického prostoru v podobě PE. \n\n• Zařízení pro souborový systém vytvoříme v podobě logického svazku LV (LOGICAL VOLUME). V rámci jeho konfigurace určujeme velikost (kolik PE se pro něj má vyhradit) a způsob alokace alokačních bloků PE.\n\n==== ALGORITMY SPRÁVY VOLNÉHO A OBSAZENÉHO MÍSTA ====\n\n• Fragmentace:\n\n• EXTERNÍ FRAGMENTACE – časem vznikají posloupnosti volných míst (malé oblasti) a využitých míst.\n\n• INTERNÍ FRAGMENTACE – vzniká nevyužité místo v posledním alokačním bloku.\n\n• Správa volných alokačních bloků:\n\n• BITOVÝ VEKTOR – každý bit určuje, zda je blok obsazen nebo ne. Nalezení volného (první jednička) může probíhat velmi rychle, ale vyžaduje paměť na uložení vektoru.\n\n• VÁZANÝ SEZNAM – volné bloky jsou zřetězené. Nalezení volného je jen přístup na začátek seznamu.\n\n====== SOUVISLÁ ALOKACE ======\n\n• Předpokládá, že každý soubor je na disku uložen v po sobě jdoucích blocích. \n\n• Relativně velký výkon, minimalizace pohybu čtecích hlav.\n\n• Problémem je vyhledání volného místa a prodlužování stávajících, vzniká externí fragmentace.\n \n====== ALOKACE POMOCÍ EXTENT ======\n\n• Rozšíření souvislé alokace, zvyšuje výkon.\n\n• Při vytvoření nového souboru je alokována souvislá sekvence bloku zvaná extent.\n\n• Až soubor překročí velikost jednoho extentu, je na jiném vhodném místě alokován další extent. \n\n• Pro jeden soubor je nutno udržovat seznam extentů spolu s informací o jejich uložení. \n\n====== ALOKACE POMOCÍ SEZNAMU ======\n\n• Snaží se řešit problém externí fragmentace.\n\n• V každém bloku na konci je odkaz na další blok.\n\n• Zhoršuje výkon. Pro každý kousek souboru ho musí přečíst celý.\n\n====== ALOKACE POMOCÍ INDEXŮ A STROMŮ ======\n\n• Vytváří datovou strukturu zvanou i-uzel (inode). Tato struktura obsahuje jak všechny atributy souboru, tak adresy všech diskových bloků souboru. Velikost uzlu bývá zvolena tak, aby její násobek byl roven velikosti alokačního bloku souborového systému nebo použitého zařízení.\n\n• Lze efektivně zvětšovat maximální velikost souboru v podstatě na libovolnou hodnotu.\n\n==== VFS (VIRTUAL FILESYSTEM) ====\n\n• Stabilní rozhraní pro přístup k souborovým systémům. Umožňuje aplikacím přistupovat k různým souborových systémů jednotně.\n\n• Definuje jednotlivé operace a jejich parametry a určuje, co musí tvůrce souborového systému implementovat (operace, sémantika).\n\n• Umožňuje existence vice souborových systémů.\n\n==== ŽURNÁLOVACÍ SOUBOROVÉ SYSTÉMY ====\n\n• ŽURNÁL – speciální soubor pro záznam modifikovaných metadata před jejich zápisem na disk.\n\n• Žurnál je pro ochranu prováděné transakce využíván následujícím způsobem:\n\n1) Do žurnálu je zapsáno, co a kde se bude měnit.\n\n2) Je provedena vlastní série změn.\n\n3) Do žurnálu je zapsáno, že operace byla úspěšně dokončena.\n\n4) Záznam v žurnálu je zrušen.\n\n• NTFS, JFS, ZFS, XFS…\n\n----\n\n== VIRTUÁLNÍ PAMĚŤ ==\n\n• Logický adresový prostor (LAP), někdy též virtuální adresový prostor je množina všech adres použitelných procesem.\n\n• Fyzický adresový prostor (FAP) je pamět’ový prostor daný použitou operační pamětí RAM v počítači. FAP je v běžném počítači jen jeden a je společně používán procesy i jádrem operačního systému.\n\n• Systém virtuální paměti musí zajistit, aby při provádění procesu každý přístup na platnou adresu do LAP automaticky zajistil přítomnost požadovaných dat ve fyzické paměti, kde s nimi procesor může manipulovat. Zpřístupnění fyzické paměti se provádí tzv. mapováním logických adres na fyzické.\n\n• Jednotlivé části LAP se do FAP mapují až podle potřeby (on demand).\n\n==== SEGMENTACE ====\n\n[[Soubor:34_01.JPG]]\n\n• LAP tvořen několika segmenty (oblastmi paměti obecně různé velikosti do limitu daného rozsahem adres (offsetu) v segmentu). Program při tomto způsobu musí obsahovat informace, ve kterém segmentu leží požadovaná data nebo kód.\n\n• Náročnější na programátora než stránkování na žádost, může způsobovat fragmentaci fyzické paměti, prakticky se nepoužívá.\n\n==== STRÁNKOVÁNÍ NA ŽÁDOST ====\n\n[[Soubor:34_02.JPG]]\n\n• Provádí mapování po stránkách (nejmenší jednotka přidělování paměti procesu a její velikost musí být mocninou 2).\n\n• Adresový prostor si lze představit jako pole stránek, kde indexy odpovídají číslu stránky.\n\n• LAP i FAP jsou rozděleny na stejně velké stránky. Stránce ve FAP obvykle říkáme rámec (frame). Stránka je nejmenší jednotkou pro kterou lze nastavit ochranu paměti (právo číst, zapisovat, provádět kód) a sdílení paměti mezi procesy.\n\n• Důležitou vlastností tohoto systému virtuální paměti je to, že proces se nemusí starat o mapování LAP na FAP, protože toto mapování je transparentně (tj. pro proces neviditelně) zajišt’ováno kombinací technického vybavení (hardware, HW) a jádra OS.\n\n• Implementačně složité, vyžaduje vyšší režii, v současnosti to používají všechny moderní víceúlohové systémy.\n\n====== PRINCIP ======\n\n1) Přístup do paměti \n\nPředpokládáme příkaz a=1; který překladač přeloží například na instrukci mov [LA],1 kde LA je logická adresa globální neinicializované proměnné a typu int. Při provádění instrukce pošle CPU tuto logickou adresu LA na adresovou sběrnici.\n\n2) Překlad adresy\n\nNa adresové sběrnici je připojena MMU (v textu dále), která transformuje logickou adresu LA na fyzickou adresu FA, která je dále předávána operační paměti (RAM). Při překladu LA na FA může dojít k výpadku stránky – neplatný odkaz do paměti (přerušení procesoru – reakce na to je součástí jádra OS).\n\n3) Obsluha výpadku stránky\n\n Kontrola, zda neodkazujeme mimo přidělený prostor.\n\n A – Alokace rámce (získá adresu volného rámce a přidělí ji procesu).\n\n B – Naplnění rámce daty (celá stránka je inicializována na nulu a poté naplněna daty).\n\n C – Aktualizace tabulky stránek (aktualizuje se záznam v tabulce stránek příslušného procesu).\n\n D – převedení procesu do stavu připraven.\n\n====== TABULKY STRÁNEK ======\n\n• Tabulka stránek je datová struktura, která umožní rychlé vyhledání záznamu podle zadaného čísla logické stránky. Typicky je podobná poli, které je indexované číslem logické stránky.\n\n• Záznam obsahuje: příznak přítomnosti stránky ve FAP, číslo rámce ve FAP, kde je obsah stránky, přístupová práva a další údaje pro potřeby virtuální paměti (např. dirty bit – příznak modifikace stránky).\n\n• Jednoúrovňové – pro každý proces je třeba tabulka s velkým počtem položek.\n\n[[Soubor:34_03.JPG]]\n\n• Víceúrovňové hierarchické tabulky stránek jsou rozděleny na menší části indexované menší tabulkou, která také může být rozdělena atd. Typicky se používají na 32bitových architekturách. \n\n[[Soubor:34_04.JPG]]\n\n• Hashované – indexování pomocí hashovací funkce (dostane číslo stránky a dle fce ho převede na index). V položkách tabulky je uloženo i číslo logické stránky. Používá se v některých 64 bitových systémech.\n\n• Invertované – existuje pouze jedna tabulka pro FAP (pro každý rámec definuje, který proces do nˇej má namapovánu kterou stránku), vyhledává se index pozice záznamu v tabulce. Problematická implementace sdílení stránek.\n \n====== MMU (MEMORY MANAGEMENT UNIT - PŘEKLAD ADRES) ======\n\n• Počítačová komponenta zodpovědná za zpracování přístupů k paměti, o které žádá CPU (Central Processing Unit).\n\n• Překládá virtuální adresu na fyzickou adresu, dále obsahuje nástroje pro ochranu dat, kontrolu cache a další.\n\n1) Pokud není bit přítomnosti nastaven – MMU vyvolá přerušení (PageFault) a žádný přístup do paměti neproběhne.\n\n2) Pokud je bit přítomnosti nastaven a stránka má vyhovující přístupová práva, provede MMU překlad LA na FA. Překlad znamená kopii dolních N bitů logické adresy (pro velikost stránky 2N) a do zbývajících horních bitů výsledné FA je okopírováno číslo rámce z aktuální položky tabulky stránek. Výsledná FA je odeslána na adresovou sběrnici operační paměti (RAM).\n\n• TLB (Translation Look-aside Buffer) je asociativní pamět’, do které jsou ukládány dvojice (klíč,hodnota), kde klíčem je číslo logické stránky a hodnotou je odpovídající položka tabulky stránek. Slouží ke zrychlení práce MMU.\n\n[[Soubor:34_05.JPG]]\n\n====== ODKLÁDÁNÍ STRÁNEK ======\n\n• Systém virtuální paměti musí řešit problém s jeho přeplněním, proto musí systém virtuální paměti odkládat některé stránky do speciální odkládací paměti – obvykle na disk. Tím se uvolní místo pro nové požadavky. Existuje lokální odkládání (v rámci procesu) a globální odkládání (bez ohledu na proces, kterému patří stránka).\n\n• Stránky, které proces potřebuje v určitém časovém intervalu tvoří PRACOVNÍ MNOŽINU stránek. Počet stránek v pracovní množině bývá podstatně menší než celkový počet stránek používaných procesem za celou dobu jeho běhu. To dovoluje udržovat ve fyzické paměti jen potřebné stránky a dynamicky přidávat/odebírat další stránky podle potřeb procesu.\n\n• Mají-li programy jen malý počet stránek současně mapovaných do FAP, říká se, že mají dobrou LOKALITU ODKAZŮ.\n\n• Typicky jsou používány varianty algoritmu LRU (Least Recently Used) - nejdéle nepoužitá stránka je vybrána k odstranění z FAP. Případně jde použít FIFO (a další jako 2nd chance, LFU, MFU …).\n\n• Odkládání na disk vyžaduje speciální pamět’ (disková oblast nebo soubor) pro ukládání obsahu stránek. Tato oblast je obvykle nazývána SWAP.','utf-8'),(1261,'','utf-8'),(1262,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\nŘetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech. Pokud použijeme zřetězené zpracování v procesoru, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů.\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků\n\n----\n\n\n\'\'\'Konflikty u řetězeného zpracování v procesorech, které mohou vést ke zpomalení linky:\'\'\'\n# \'\'\'Strukturální\'\'\' – obvodová struktura neumožňuje současné provedení určitých akcí – např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU.\n# \'\'\'Datové\'\'\' – když jsou zapotřebí data z předcházející instrukce, která není dokončena.\n# \'\'\'Řídicí\'\'\' – když skoková instrukce mění obsah PC, nebo jiné.\n\n\n\n\'\'\'Řešení těchto problémů:\'\'\'\n# \'\'\'Strukturální\'\'\' - rozdělit paměť na paměť instrukcí a paměť dat. Obecné řešení je například přidání výpočetních jednotek procesoru.\n# \'\'\'Datové\'\'\' - řešením může být \'\'\'bypassing\'\'\' - poskytnutí mezivýsledku dřív, než bude zapsán do registru. Je to umožněno přidáním speciálních datových cest\n# \'\'\'Řídící\'\'\' - problémy se skokovými instrukcemi. Možná řešení:\n## Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu.\n## Nelze-li takové užitečné instrukce najít, vložit NOPy (no operation).\n## Predikce skoku, rozpracovat pouze predikovanou možnost.\n## Rozpracovat obě možnosti pokračování skokové instrukce.\n\nU všech skoků je třeba zrychlit zjištění cílové adresy – k tomu se používá malá paměť cache pro uložení cílových adres (BTB – Branch Target Buffer), která se postupně naplňuje a aktualizuje. Pro nepodmíněné skoky a pro správně predikované podmíněné skoky se zřetězená linka nepozastaví.\n\n----\n\n\n====CISC====\nPůvodní přístup k činnosti procesoru. Programy byly vytvářeny v assembleru ručně, co vedlo na vytváření komplikovaných a snadno použitelných instrukcií, různé adresové režimy, kombinované instrukce a pod. To dává velké možnosti optimalizace kódu a poskytuje obrovskou rýchlost pro výpočet. Nevýhodou je, že kromě rozsahu instrukčního souboru trvá provedení každé instrukce různou dobu, co vede při použití řetězeného zpracování na velkou složitost řadiče. Ten je při CISC často tvořen dalším procesorem (mikrořadičem) obsahujícím vlastní mikroprogram (firmware). Při takto rozsáhlých instrukčních souborech je problém s překladem (překládač neumí využít všechny instrukce a adresové módy) což vedlo na zavedení architektury RISC. Aktuálně jsou dostupné procesory, které kombinují rysy obou přístupů (RISC i CISC).\n\n======Mikroporgram======','utf-8'),(1263,'== PROCES ==\n\n• Je chápán jako program v běhu, jeho instance, která je nahrána do paměti počítačového systému a spuštěna. \n\n• V jednom okamžiku tak mohou být spuštěny instance (procesy) různých, ale i stejných programů.\n\n• Hlavním úkolem operačního systému je zajištění běhu uživatelských procesů. Jelikož procesů může běžet současně více a systémové zdroje jsou omezené, musí procesy tyto zdroje sdílet. Operační systém musí také zajištovat správu přístupů k těmto sdíleným zdrojům. Jedním z těchto zdrojů je i procesor (CPU – Central Processing Unit). \n\n• SPRÁVA PROCESŮ (process management) zahrnuje plánovač (scheduler), který přiděluje procesor (CPU) procesům, správu paměti (memory management) a podporu meziprocesové komunikace (IPC).\n\nSTAVY\n\n1) NOVÝ (New) je právě vytvořený.\n\n2) BĚŽÍCÍ (Running) je přiřazen procesoru a běží, provádějí se jeho instrukce.\n\n3) ČEKAJÍCÍ (Waiting) čeká na výskyt nějaké události, \nnapř. dokončení vstupně výstupní operace.\n\n4) PŘIPRAVENÝ (Ready) čeká na své přiřazení procesoru.\n\n5) UKONČENÝ (Terminated) ukončil svůj běh.\n\n• V systému UNIX se ještě setkáme s následujícími stavy:\n\n6) VYTVOŘENÝ (init) je ještě neinicializovaný.\n\n7) PŘIPRAVENÝ (runnable) by mohl běžet, ale nemá přístup do CPU.\n\n8) BĚŽÍCÍ (running) používá CPU.\n\n9) MÁTOHA (zombified) je po exit, rodič ještě nepřevzal exit-code\n\n10) ČEKAJÍCÍ (sleeping) čeká na událost.\n\n11) ODLOŽENÝ (suspended) ”zmrazený“ signálem SIGSTOP.\n\n• Každý proces končí s návratovou hodnotou, která identifikuje způsob jeho ukončení.\n\nSOUČÁSTI \n\n• Instance kódu, sekvence instrukcí, které se postupně provádějí. \n\n• Informace o aktuální pozici (program counter).\n\n• Obsah registrů procesoru, zásobník obsahující dočasná data (parametry metod, lokální proměnné apod.) a další údaje v závislosti na hostitelském prostředí.\n\n• Obecně je proces v operačním systému definován následujícími vlastnostmi (uloženy ve struktuře process control block (PCB)).\n\nPCB\n\n• PCB (Process Control Block) nebo task control block, task struct…\n\n• Struktura pro uložení informací o procesu. Může být také rozdělen do několika dílčích struktur.\n\n• PCB zahrnuje:\n\n1) identifikátor (PID)\n\n2) stav jeho plánování\n\n3) program, kterým je řízen\n\n4) obsah registrů (včetně EIP a ESP apod.)\n\n5) data a zásobník\n\n6) využití dalších zdrojů OS a vazba na další objekty OS (otevřené soubory, signály atd.)\n\n7) plánovací informace (priorita, ukazatele na plánovací fronty, ...)\n\n8) informace spojené se správou paměti (tabulky stránek, ...),\n\n9) informace spojené s účtováním (spotreba procesoru, ...),\n\n10) využití I/O zdrojů (otevrené soubory, používaná zarízení., ...).\n\nPROCES V UNIXU\n\nIDENTIFIKÁTORY\n\n• identifikace procesu PID\n\n• identifikace předka procesu PPID\n\n• reálný (skutečný) uživatel UID, skupina uživatelů GID\n\n• efektivní uživatel EUID, skupina uživatelů EGID\n\n• uložená EUID, uložená EGID (v Linuxu navíc FSUID a FSGID)\n\n• skupina procesů PGID a sezení SID, do kterých proces patří\n\nČÁSTI PROCESU V PAMĚTI\n\nUŽIVATELSKÝ ADRESOVÝ PROSTOR (USER ADDRESS SPACE) \n\n• Je prostor obsahující:\n\n1) kód (code area/text segment)\n\n2) data (inicializovaná/neinicializovaná data, heap)\n\n3) zásobník\n\n4) soukromá data sdílených knihoven, sdílené knihovny, sdílená pamet’\n\nUŽIVATELSKÁ OBLAST (USER AREA)\n\n• Uložena zvlášť pro každý proces spolu s daty, kódem a zásobníkem v user address space procesu.\n\n• Je přístupná pouze jádru.\n\n• Obsahuje část PCB, která je používána zejména za běhu procesu:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) obsah registru\n\n3) deskriptory souboru\n\n4) obslužné funkce signálu\n\n5) účtování (spotřebovaný čas CPU...)\n\n6) pracovní a kořenový adresář\n\nZÁZNAM V TABULCE PROCESU (PROCESS TABLE)\n\n• Uložen trvale v jádru.\n\n• Obsahuje zejména informace o procesu, které jsou důležité, i když proces neběží:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) stav plánování\n\n3) událost, na kterou se čeká\n\n4) plánovací informace (priorita, spotřeba času...)\n\n5) čekající signály\n\n6) odkaz na tabulku paměťových regionů procesu\n\nTABULKA PAMĚTOVÝCH REGIONŮ PROCESU (PER-PROCESS REGION TABLE) \n\n• Popis paměťových regionů procesu (spojitá oblast virtuální paměti použitá pro data, kód, zásobník, sdílenou pamet’) + príslušné položky tabulky regionu, tabulka stránek.\n\nZÁSOBNÍK JÁDRA\n\nKONTEXT PROCESU\n\n• Někdy se též používá pojem kontext procesu = stav procesu.\n\n1) uživatelský kontext (user-level context): kód, data, zásobník, sdílená data\n\n2) registrový kontext\n\n3) systémový kontext (system-level context): uživatelská oblast, položka tabulky procesu, tabulka pamětových regionů procesu...\n\nSYSTÉMOVÁ VOLÁNÍ NAD PROCESY\n\n• fork, exe, exit, wait, kil, signal, getpid, getpid\n\nVYTVÁŘENÍ PROCESU\n\n• Vytváření procesu – služba fork: duplikuje proces, vytvoří potomka (vztah rodič–potomek (parent–child), hierarchie procesu).\n\nHIERARCHIE PROCESU\n\n• Předkem všech uživatelských procesu je init s PID = 1.\n\n• Procesy jádra, jejichž předkem není init:\n\n1) Naprosto prvním procesem (PID = 0) bývá SWAPPER (na Linuxu pouze idle, nevypisuje se).\n\n2) Mezi další procesy jádra (kód součástí jádra), jejichž předkem není init, muže pařit napr. pagedaemon.\n\n• Pokud procesu skoncí předek, jeho předkem se automaticky stane init, který později převezme jeho návratový kód (proces nemůže definitivně skončit a jako zombie čeká, dokud neodevzdá návratový kód).\n\nSTART SYSTÉMU\n\n• Posloupnost akcí při startu systému:\n\n1) BIOS\n\n2) Načtení a spuštení zavaděce (mbr, boot block).\n\n3) Načtení a spuštení jádra.\n\n4) Jádro vytvoří proces swapper, ten vytvoří případné další procesy jádra a proces init, případne se vytvoří přímo proces init.\n\n5) Init nacítá inicializační konfigurace a spouští další démony a procesy.\n\n• V UNIXu System V byl zaveden systém úrovní behu – SYSV init run-levels: 0-6, s/S (0=halt, 1=single user, s/S=alternativní přechod do single user, 6=reboot). Změna úrovně běhu: telinit N.\n\nPŘEPNUTÍ KONTEXTU PROCESU\n\n• Přepnutí procesoru (CPU) na jiný proces vyžaduje uložení stavu starého procesu, který dosud používal CPU, a nahrání uloženého stavu nového procesu. Tato úloha je označována jako přepnutí kontextu. Kontext procesu je reprezentován jeho PCB.\n\n• Princip: Plánovač odebere procesor procesu P0, uloží jeho stav do PCB0, obnoví stav procesu P1 z jeho PCB1 a přidělí procesor procesu P1. Přepnutí kontextu je spojeno s režií – přepnutí trvá stovky až tisíce instrukcí. Všechny informace a data, která jsou s během procesu spojena, není nutno ukládat a poté obnovovat - je možné režii spojenou s přepnutím kontextu snížit.\n\nVLÁKNA\n\n• Definováno svým identifikátorem (thread ID), aktuální pozicí v programu (program counter), množinou registrů a zásobníkem. \n\n• Pokud má proces více vláken, je schopen vykonávat více úloh současně.\n\n• Vícevláknové procesy mají proti jednovláknovému procesu vlastnosti, které jsou klíčové z hlediska jejich použitelnosti, zejména:\n\n1) RESPONSIVENESS - zvyšují rychlost odezvy aplikace vůči uživateli, když je část aplikace blokována nebo provádí náročnou operaci (prohlížeč umožňuje interakci s uživatele a v jiném vlákně nahrává obrázek).\n\n2) RESOURCE SHARING - vlákna sdílejí pamět’, zdroje a kód procesu (více různých vláken aktivit ve stejném adr. prostoru).\n\n3) ECONOMY - díky sdílení zdrojů je vytváření a přepínání kontextu vláken mnohem úspornější.\n\n• Vlákna mohou být v systémech podporována na dvou úrovních:\n\n1) UŽIVATELSKÁ VLÁKNA (user threads) jsou spravována na uživatelské úrovni, bez účasti jádra operačního systému.\n\n2) VLÁKNA JÁDRA (kernel threads) jsou podporována a spravována přímo operačním systémem.\n\nPLÁNOVÁNÍ PROCESŮ\n\n• V OS, který umožňuje souběžný běh více procesů. \n\n• Z hlediska multiprogramování je klíčová maximalizace využití procesoru. \n\n• Z pohledu sdílení času (time sharing) je důležitá frekvence přepínání procesoru (CPU) mezi jednotlivé procesy takovým způsobem, aby byl uživatel schopen komunikovat s každou spuštěnou aplikací (tj. procesem). \n\n• Používá se plánovač procesů (process scheduler), který vybírá nejvhodnější proces pro běh v daném okamžiku. \n\n• V počítačových systémech, které mají pouze jeden procesor, může reálně běžet pouze jeden proces – pokud je jich spuštěno více, musí ostatní čekat, až plánovač procesů rozhodne o jejich přidělení procesoru.\n\nPLÁNOVACÍ FRONTA\n\n• Když proces vstupuje do systému, je vložen do fronty úloh (JOB QUEUE), která obsahuje všechny procesy v systému. \n\n• Procesy v hlavní paměti připravené k běhu čekají na přidělení procesoru ve frontě připravených procesů (READY QUEUE). \n\n• Seznam procesů čekajících na příslušné vstupně-výstupní zařízení je nazýváno fronta zařízení (DEVICE QUEUE). Každé zařízení má svou frontu. Prvky fronty jsou PCB jednotlivých procesů. Hlavička fronty obsahuje ukazatel na první a poslední PCB ve frontě.\n\nPLÁNOVAČ\n\n• V okamžiku, kdy se procesor uvolní, musí OS vybrat jeden z procesů, který je umístěn ve frontě připravených procesů. \n\n• Výběr je prováděn krátkodobým plánovačem (short-term scheduler), ten vybírá procesy podle implementovaného algoritmu. \n\n• NEPREEMPTIVNÍ PLÁNOVÁNÍ - pokud je proces jednou přidělen procesoru, tento proces si drží procesor, dokud ho sám neuvolní bud’ svým ukončením nebo přepnutím do stavu čekání. Např. plánovače používané v některých OS Windows.\n\n• PREEMPTIVNÍ PLÁNOVÁNÍ - k přepnutí kontextu dochází na základě vnějšího podnětu (přerušení), typicky od časovače. K přepnutí kontextu tedy může dojít kdykoliv a proces nemá přímou kontrolu nad dobou svého běhu.\n\n• Rozhodnutí o přeplánování procesů může vzniknout:\n\n1) když se proces přepne ze stavu běžící do stavu čekající (např. při vstupněvýstupní operaci) (nepreemptivní).\n\n2) když se proces přepne ze stavu běžící do stavu připravený (např. při přerušení) (preemptivní).\n\n3) když se proces přepne ze stavu čekající do stavu připravený (např. při dokončení vstupně-výstupní operace) (preemptivní).\n\n4) když se proces ukončí (nepreemptivní).\n\nPLÁNOVACÍ KRITÉRIA\n\n• Různé plánovací algoritmy mají různé vlastnosti, které mohou favorizovat jednu třídu procesů nad ostatními. Pro porovnání různých algoritmůlze využít plánovací kritéria, na základě kterých provádějí tyto algoritmy plánování.\n\n1) Využití procesoru (CPU utilization).\n\n2) Propustnost (Throughput).\n\n3) Doba běhu (Turnaround).\n\n4) Doba čekání (Waiting time).\n\n5) Doba odezvy (Response time).\n\nPLÁNOVACÍ ALGORITMY\n\nFIST COME FIRST SERVED (FCFS)\n\n• Nejjednodušší plánovací algoritmus, nepreemptivní, má velkou dobu čekání.\n\n• Proces, který požaduje procesor jako první, dostane přidělen procesor jako první. \n\n• Formou fronty FIFO (First In First Out) - vstupující je zařazen na konec fronty, procesor se přiděluje procesu ze začátku fronty.\n\nSHORTEST JOB FIRST (SJF)\n\n• Rozhoduje o přidělení procesoru podle doby následného obsazení procesoru (CPU burst-time) daným procesem. \n\n• Pokud je hodnota shodná u více procesů, vybere se na základě algoritmu FCFS.\n\n• Jde vlastně o prioritní plánování, kde je priorita určena časem trvání. \n\nPRIORITNÍ PLÁNOVÁNÍ (PRIORITY SCHEDULING)\n\n• V tomto plánovacím algoritmu je každému procesu přiřazena priorita a procesor je vždy přidělen procesu s nejvyšší prioritou.\n\n• Procesy se stejnou prioritou jsou plánovány podle algoritmu FCFS. \n\nROUND-ROBIN\n\n• Fronta připravených procesů je implementovaná jako kruhová fronta. Plánovač postupně prochází frontou a přiděluje procesor jednotlivým procesům nejvýše po dobu jednoho časového kvanta (obecně v rozsahu 10 až 100 milisekund).\n\n• Preemptivní obdoba algoritmu FCFS. \n\n• Po přidělení procesoru se nastaví časovač tak, aby generoval přerušení po uběhnutí jednoho časového kvanta.\n\n• Při běhu procesu mohou nastat tyto dva případy:\n\n1) Doba obsazení procesoru je menší než časové kvantum. Proces se sám vzdává procesoru (např. při vstupně-výstupní operaci).\n\n2) Doba obsazení procesoru je větší než časové kvantum. Po uplynutí časového kvanta generuje časovač přerušení. Dojde k přepnutí kontextu a proces je vložen na konec fronty připravených procesů.\n\nVÍCEÚROVŇOVÉ PRIORITNÍ PLÁNOVÁNÍ.\n\n• Víceúrovňové plánování patří do speciální kategorie plánovacích algoritmů. Je určeno pro situace, kdy potřebujeme rozdělit procesy na různé kategorie, nad kterými je výhodnější používat různé plánovací algoritmy, optimalizované na jiná kritéria.\n\n• V systémech typu Unix/Linux.\n\nDYNAMICKÁ ZMĚNA PRIORIT\n\n• Pokud proces spotřeboval v určitém časovém úseku hodně procesorového času, jeho priorita se dynamicky snižuje. \n\n• Důsledkem je rychlejší reakce procesů čekajících na vstupní reakce a mají tedy malou spotřebu času procesoru. \n\n• Procesy s velmi malou počáteční prioritou mají šanci, že se jejich priorita časem zvýší a bude pro ně naplánován procesor.\n\n• V systémech typu Unix/Linux. \n\nPROBLÉMY SPOJENÉ S PRIORITNÍM PLÁNOVÁNÍM\n\nPROBLÉM VYHLADOVĚNÍ\n\n• Proces, který je připraven k běhu, nedostane přidělen procesor, protože ten je neustále přidělován vice prioritním procesům.\n\n• Řešením tohoto může být přidělení určitého časového kvanta skupině procesů se stejnou prioritou. Po vyčerpání kvanta se začnou plánovat procesy s nižší prioritou. \n\n• Jiným řešením může být explicitní kontrola, zda někdo nehladoví.\n\nPROBLÉM INVERZE PRIORIT\n\n• Nízko prioritní proces má a lokovaný nějaký zdroj a je blokován více prioritními procesy. Nízko prioritní zdroj tedy nemůže dokončit operaci s daným zdrojem a blokuje ho.\n\nVÍCEPROCESOROVÉ SYSTÉMY \n\n• Nutnost vyvažovat výkon.\n\nREAL-TIME SYSTÉMY \n\n• Nutnost zajistit garantovanou odezvu některých akcí.\n\nKOMUNIKACE PROCESŮ\n\n• Procesy mohou mezi sebou komunikovat prostřednictvím prostředků, které se souhrnně označují jako meziprocesová komunikace (Inter-Process Communication – IPC). Mezi tyto prostředky patří zejména:\n\n1) signály (systémová volání kill, signal, ...)\n\n2) roury (systémová volání pipe, ...)\n\n3) zprávy (systémová volání msgsnd, msgrecv, ...)\n\n4) sdílená pamět’ (systémová volání shmget, shmat, ...)\n\n5) sockety (systémová volání socket, ...)\n\n6) RPC – Remote Procedure Call\n\nSIGNÁLY\n\n• Číslo (int) zaslané procesu prostrednictvím pro to zvlášte definovaného rozhraní.\n\n• Signály jsou generovány: při chybách (aritmetická chyba, chyba práce s pamětí...), při externích událostech (vypršení časovace, dostupnost I/O, ...), na žádost procesu – IPC (kil, ...).\n\n• Signály často vznikají asynchronně k činnosti programu.\n\n• Mezi implicitní reakce na signál patří: ukončení procesu (případně s generováním core dump), ignorování a pozastavení.\n\n• Lze předefinovat obsluhu všech signálu mimo SIGKIL, SIGSTOP a SIGCONT.\n\nSYNCHRONIZACE PROCESŮ\n\nČASOVĚ ZÁVISLÉ CHYBY (RACE CONDITION)\n\n• Chyby vznikající při přístupu ke sdíleným zdrojům (sdílená data, sdílená I/O zařízení) kvůli různému pořadí provádění jednotlivých výpočtův systému, tj. kvůli jejich různé relativní rychlosti. \n\n• Ve stejnou chvíli se dva procesy snaží změnit stejnou hodnotu.\n\n• Hrozí pak, že operace proběhne jako neatomická (proběhne částečně).\n\nPROBLÉM KRITICKÉ SEKCE\n\n• Kritickou sekcí nazveme úsek kódu, jehož korektní provádění vyžaduje vzájemné vyloučení vůči jiným úsekům kódu - v daném okamžiku může existovat nanejvýš jeden proces, jehož řízení se nachází v rámci některého z těchto úseků kódu. \n\n• Při práci se sdílenými kritickými sekcemi je zapotřebí zajistit:\n\n1) Vzájemné vyloučení (mutual exclusion), kdy nanejvýš jeden proces (případně určitý počet procesů) může být v daném okamžiku v dané skupině sdílených kritických sekcí.\n\n2) Dostupnost kritické sekce – tj. každý proces by měl mít možnost vstoupit do kritické sekce v konečném čase.\n\n• UVÁZNUTÍ (deadlock) je situace, kdy každý ze skupiny procesů čeká na stav, který by mohl nastat pouze tehdy, kdyby někdo z dané skupiny procesů mohl pokračovat.\n\n• BLOKOVÁNÍ (blocking) je situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. \n\n• STÁRNUTÍ (starvation) je situace, kdy proces čeká na podmínku, která vždy může, ale nemusí nastat. Někdy to bývá tolerováno.\n\nAlgoritmy pro vstup do kritické sekce:\n\nPETERSONŮV ALGORITMUS \n\n• Proces i při vstupu do kritické sekce vyjádří svůj zájem o kritickou sekci nastavením příznaku flag[i], ale současně dá přednost svému protivníkovi nastavením turn na 1-i. Následně proces aktivně čeká, až bud’ jeho protivník nemá o kritickou sekci zájem, nebo mu vrátí přednost ke vstupu do kritické sekce.\n\nBAKERY ALGORITMUS\n\n• Před vstupem do kritické sekce proces získá lístek, jehož číselná hodnota je větší než čísla přidělená již čekajícím procesům.\n\nSEMAFORY\n\n• Celočíselná sdílená proměnná přístupná dvěmi atomickými (až na možnost pozastavení, je-li semafor obsazen) operacemi:\n\n1) lock (v některé literatuře též označovaná jako P či wait).\n\n2) unlock (také V či signal).\n\n• Semafor může vpouštět procesy do kritické sekce po jednom (tzv. binární semafor, též označovaný jako tzv. mutex) či po více.\n\n• Při obsazování kritické sekce se hodnota semaforu snižuje, při uvolňování naopak zvyšuje. \n\n• Je-li hodnota semaforu kladná, udává počet procesů, který je ještě možné vpustit do kritické sekce. Je-li tato hodnota nulová znamená to, že kritická sekce je obsazená, ale nikdo na kritickou sekci nečeká. Klesne-li semafor do záporných hodnot znamená to, že kritická sekce je obsazená a navíc příslušný počet procesů na semaforu čeká. Tyto procesy typicky nečekají aktivně, ale jsou pozastaveny a odkaz na ně je uložen ve frontě spojené se semaforem.\n\nMONITORY\n\n• Abstraktní datový typ, který v sobě zapouzdřuje sdílená data, nad kterými je možno v rámci monitoru implementovat určité operace, přičemž je zaručeno, že v daném okamžiku bude vždy rozpracována pouze jedna z těchto operací. \n\n• Uživatelsky příjemnější.\n\n• Zahrnuje i příslušný inicializační kód pro sdílená data. \n\n• Za běhu na vstupu do monitoru může vzniknout fronta čekajících procesů.\n\n• Pro použití i pro čekání na určitou událost se rozšiřuje o koncept podmínek (conditions). Nad podmínkami deklarovanými v rámci monitoru (například syntaktickou konstrukcí condition c1, c2, ...;) lze užít operace wait (pouze pozastaví) a signal nebo notify (upozorní proces na splnění podmínek).\n\nKLASICKÉ SYNCHRONIZAČNÍ PROBLÉMY\n\n• PRODUCENT A KONZUMENT - jeden generuje data a zasílá je druhému k dalšímu zpracování přes buffer o kapacitě N položek. Když se vyrovnávací pamět’ zaplní, musí čekat producent; je-li buffer prázdný, musí čekat konzument.\n\n• ČTENÁŘI A PÍSAŘI - máme libovolný počet procesů, některé čtou sdílená data, zatímco jiné je modifikují. V daném okamžiku může současně číst libovolný počet čtenářů. Pokud nějaký písař píše, nemůže žádný čtenář číst, ani žádný další písař psát.\n\n• VEČEŘÍCÍ FILOZOFOVÉ - pět filozofů sedí kolem kulatého stolu. Každý má svůj talíř a k jídlu používá čínské hůlky, mezi každými dvěmi filozofy je umístěna jediná hůlka. Aby filozof mohl jíst, musí získat obě hůlky, které se nacházejí po stranách jeho talíře. Pak se může najíst, hůlky vrátit na stůl a přemýšlet, zatímco jí někdo jiný.\n\nUVÁZNUTÍ (DEADLOCK) \n\n• Situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. Aby došlo k uváznutí (deadlocku) musí být splněny podmínky:\n\n1) Musí být užito vzájemného vyloučení při přístupu ke sdíleným prostředkům.\n\n2) Ve skupině procesů, které uvázly, jsou procesy, které vlastní alespoň jeden zdroj a čekají na další.\n\n3) Sdílené zdroje jsou uvolňovány až po úplném dokončení jejich použití.\n\n4) Vzniká cyklická závislost na sebe čekajících procesů, proces 1 vlastní zdroje a čeká na zdroj používaný procesem 2, 2 na 3, 3 na 1.\n\nPREVENCE UVÁZNUTÍ\n\n1) U prostředků, které umožňují sdílený přístup, nejsou zámky zapotřebí a nebudeme je tedy zbytečně používat.\n\n2) Proces může žádat o prostředky pouze tehdy, pokud žádné nevlastní.\n\n3) Pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, prostředky jsou mu odebrány a čeká se.\n\n4) Prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším (nebo v jiném pevně daném pořadí).\n\nVYHÝBÁNÍ SE UVÁZNUTÍ\n\n• Princip je založen na tom, že každý proces před spuštěním deklaruje určité informace o způsobu, jakým bude využívat sdílené zdroje. Ná plánování rozdělení zdrojů se pak používá Bankéřův algoritmus.\n\nDETEKCE UVÁZNUTÍ A ZOTAVENÍ\n\n• Periodicky (nebo při každé žádosti o zdroje) se kontroluje, zda nedošlo k uváznutí. Pokud ano, pak systém uváznutí odstraní např. tak, že některému procesu odebere některé zdroje a proces pozastaví.\n\nFORMÁLNÍ VERIFIKACE\n\n• Je třeba pokud se nepoužije žádný z mechanizmů prevence, detekce a zotavení. Dokazuje správnost systému.\n\n• Proces formální verifikace:\n\n1) Vytvoření modelu.\n\n2) Specifikace vlastnosti, kterou chceme ověřit.\n\n3) Kontrola, zda model splňuje specifikaci.\n\n• Zakladní přístupy k formální verifikaci:\n\n1) Theorem proving: Využívá poloautomatický dokazovací prostředek. Vyžaduje experta, který určuje, jak se má důkaz vést.\n\n2) Model checking: Využívá automatický prostředek, generování a prohledávání stavového prostoru. Velikost stavového prostoru roste exponenciálně s velikostí modelu.\n\n3) Static analysis: Snaha o ověření příslusných vlastností na základě popisu modelu či system bez jeho provádění.\n\nTRANSAKCE\n\n• Skupina operací, které jsou vykonávané jako celek (většinou nad databází). \n\nACID\n\n• Transakční systém podporující vykonávání transakcí a zajišťující jejich specifické vlastnosti.\n\nA – atomicity (provede se pouze celá transakce nebo vůbec).\n\nC – consistency (koresponduje s údaji z reálného světa).\n\nI – isolation/independence (transakce probíhají odděleně pomocí sekvenčního zpracování, paralelního nebo díky plánu). \n\nD – durability (trvanlivost – neztrácí se data).\n\nMODELY TRANSAKCÍ\n\n• Ploché transakce – transakce střídá výpočet s lokáílními proměnnými a vykonávání SQL příkazů, dokud neskončí.\n\n• Strukturované transakce – umožňuje dekompozici transakce a její lepší abstakci atomicity, integrity a trvanlivosti\n\n• Milníky (savepoints) – místo v transakci fungující jako bod pro částečný návrat (databáze se vrátí do stavu, v jakém byla).','utf-8'),(1264,'== PROCES ==\n\n• Je chápán jako program v běhu, jeho instance, která je nahrána do paměti počítačového systému a spuštěna. \n\n• V jednom okamžiku tak mohou být spuštěny instance (procesy) různých, ale i stejných programů.\n\n• Hlavním úkolem operačního systému je zajištění běhu uživatelských procesů. Jelikož procesů může běžet současně více a systémové zdroje jsou omezené, musí procesy tyto zdroje sdílet. Operační systém musí také zajištovat správu přístupů k těmto sdíleným zdrojům. Jedním z těchto zdrojů je i procesor (CPU – Central Processing Unit). \n\n• SPRÁVA PROCESŮ (process management) zahrnuje plánovač (scheduler), který přiděluje procesor (CPU) procesům, správu paměti (memory management) a podporu meziprocesové komunikace (IPC).\n\n==== STAVY ====\n\n1) NOVÝ (New) je právě vytvořený.\n\n2) BĚŽÍCÍ (Running) je přiřazen procesoru a běží, provádějí se jeho instrukce.\n\n3) ČEKAJÍCÍ (Waiting) čeká na výskyt nějaké události, \nnapř. dokončení vstupně výstupní operace.\n\n4) PŘIPRAVENÝ (Ready) čeká na své přiřazení procesoru.\n\n5) UKONČENÝ (Terminated) ukončil svůj běh.\n\n• V systému UNIX se ještě setkáme s následujícími stavy:\n\n6) VYTVOŘENÝ (init) je ještě neinicializovaný.\n\n7) PŘIPRAVENÝ (runnable) by mohl běžet, ale nemá přístup do CPU.\n\n8) BĚŽÍCÍ (running) používá CPU.\n\n9) MÁTOHA (zombified) je po exit, rodič ještě nepřevzal exit-code\n\n10) ČEKAJÍCÍ (sleeping) čeká na událost.\n\n11) ODLOŽENÝ (suspended) ”zmrazený“ signálem SIGSTOP.\n\n• Každý proces končí s návratovou hodnotou, která identifikuje způsob jeho ukončení.\n\n[[Soubor:34_01.JPG]]\n\n----\n\n==== SOUČÁSTI ====\n\n• Instance kódu, sekvence instrukcí, které se postupně provádějí. \n\n• Informace o aktuální pozici (program counter).\n\n• Obsah registrů procesoru, zásobník obsahující dočasná data (parametry metod, lokální proměnné apod.) a další údaje v závislosti na hostitelském prostředí.\n\n• Obecně je proces v operačním systému definován následujícími vlastnostmi (uloženy ve struktuře process control block (PCB)).\n\n====== PCB ======\n\n• PCB (Process Control Block) nebo task control block, task struct…\n\n• Struktura pro uložení informací o procesu. Může být také rozdělen do několika dílčích struktur.\n\n• PCB zahrnuje:\n\n1) identifikátor (PID)\n\n2) stav jeho plánování\n\n3) program, kterým je řízen\n\n4) obsah registrů (včetně EIP a ESP apod.)\n\n5) data a zásobník\n\n6) využití dalších zdrojů OS a vazba na další objekty OS (otevřené soubory, signály atd.)\n\n7) plánovací informace (priorita, ukazatele na plánovací fronty, ...)\n\n8) informace spojené se správou paměti (tabulky stránek, ...),\n\n9) informace spojené s účtováním (spotreba procesoru, ...),\n\n10) využití I/O zdrojů (otevrené soubory, používaná zarízení., ...).\n\n----\n\n==== PROCES V UNIXU ====\n\n====== IDENTIFIKÁTORY ======\n\n• identifikace procesu PID\n\n• identifikace předka procesu PPID\n\n• reálný (skutečný) uživatel UID, skupina uživatelů GID\n\n• efektivní uživatel EUID, skupina uživatelů EGID\n\n• uložená EUID, uložená EGID (v Linuxu navíc FSUID a FSGID)\n\n• skupina procesů PGID a sezení SID, do kterých proces patří\n\n====== ČÁSTI PROCESU V PAMĚTI ======\n\n\'\'\'UŽIVATELSKÝ ADRESOVÝ PROSTOR (USER ADDRESS SPACE)\'\'\' \n\n• Je prostor obsahující:\n\n1) kód (code area/text segment)\n\n2) data (inicializovaná/neinicializovaná data, heap)\n\n3) zásobník\n\n4) soukromá data sdílených knihoven, sdílené knihovny, sdílená pamet’\n\n\'\'\'UŽIVATELSKÁ OBLAST (USER AREA)\'\'\'\n\n• Uložena zvlášť pro každý proces spolu s daty, kódem a zásobníkem v user address space procesu.\n\n• Je přístupná pouze jádru.\n\n• Obsahuje část PCB, která je používána zejména za běhu procesu:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) obsah registru\n\n3) deskriptory souboru\n\n4) obslužné funkce signálu\n\n5) účtování (spotřebovaný čas CPU...)\n\n6) pracovní a kořenový adresář\n\n\'\'\'ZÁZNAM V TABULCE PROCESU (PROCESS TABLE)\'\'\'\n\n• Uložen trvale v jádru.\n\n• Obsahuje zejména informace o procesu, které jsou důležité, i když proces neběží:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) stav plánování\n\n3) událost, na kterou se čeká\n\n4) plánovací informace (priorita, spotřeba času...)\n\n5) čekající signály\n\n6) odkaz na tabulku paměťových regionů procesu\n\n\'\'\'TABULKA PAMĚTOVÝCH REGIONŮ PROCESU (PER-PROCESS REGION TABLE)\'\'\' \n\n• Popis paměťových regionů procesu (spojitá oblast virtuální paměti použitá pro data, kód, zásobník, sdílenou pamet’) + príslušné položky tabulky regionu, tabulka stránek.\n\n\'\'\'ZÁSOBNÍK JÁDRA\'\'\'\n\n====== KONTEXT PROCESU ======\n\n• Někdy se též používá pojem kontext procesu = stav procesu.\n\n1) uživatelský kontext (user-level context): kód, data, zásobník, sdílená data\n\n2) registrový kontext\n\n3) systémový kontext (system-level context): uživatelská oblast, položka tabulky procesu, tabulka pamětových regionů procesu...\n\n====== SYSTÉMOVÁ VOLÁNÍ NAD PROCESY ======\n\n• fork, exe, exit, wait, kil, signal, getpid, getpid\n\n====== VYTVÁŘENÍ PROCESU ======\n\n• Vytváření procesu – služba fork: duplikuje proces, vytvoří potomka (vztah rodič–potomek (parent–child), hierarchie procesu).\n\n====== HIERARCHIE PROCESU ======\n\n• Předkem všech uživatelských procesu je init s PID = 1.\n\n• Procesy jádra, jejichž předkem není init:\n\n1) Naprosto prvním procesem (PID = 0) bývá SWAPPER (na Linuxu pouze idle, nevypisuje se).\n\n2) Mezi další procesy jádra (kód součástí jádra), jejichž předkem není init, muže pařit napr. pagedaemon.\n\n• Pokud procesu skoncí předek, jeho předkem se automaticky stane init, který později převezme jeho návratový kód (proces nemůže definitivně skončit a jako zombie čeká, dokud neodevzdá návratový kód).\n\n====== START SYSTÉMU ======\n\n• Posloupnost akcí při startu systému:\n\n1) BIOS\n\n2) Načtení a spuštení zavaděce (mbr, boot block).\n\n3) Načtení a spuštení jádra.\n\n4) Jádro vytvoří proces swapper, ten vytvoří případné další procesy jádra a proces init, případne se vytvoří přímo proces init.\n\n5) Init nacítá inicializační konfigurace a spouští další démony a procesy.\n\n• V UNIXu System V byl zaveden systém úrovní behu – SYSV init run-levels: 0-6, s/S (0=halt, 1=single user, s/S=alternativní přechod do single user, 6=reboot). Změna úrovně běhu: telinit N.\n\n===== PŘEPNUTÍ KONTEXTU PROCESU =======\n\n• Přepnutí procesoru (CPU) na jiný proces vyžaduje uložení stavu starého procesu, který dosud používal CPU, a nahrání uloženého stavu nového procesu. Tato úloha je označována jako přepnutí kontextu. Kontext procesu je reprezentován jeho PCB.\n\n• Princip: Plánovač odebere procesor procesu P0, uloží jeho stav do PCB0, obnoví stav procesu P1 z jeho PCB1 a přidělí procesor procesu P1. Přepnutí kontextu je spojeno s režií – přepnutí trvá stovky až tisíce instrukcí. Všechny informace a data, která jsou s během procesu spojena, není nutno ukládat a poté obnovovat - je možné režii spojenou s přepnutím kontextu snížit.\n\n----\n\n== VLÁKNA ==\n\n• Definováno svým identifikátorem (thread ID), aktuální pozicí v programu (program counter), množinou registrů a zásobníkem. \n\n• Pokud má proces více vláken, je schopen vykonávat více úloh současně.\n\n• Vícevláknové procesy mají proti jednovláknovému procesu vlastnosti, které jsou klíčové z hlediska jejich použitelnosti, zejména:\n\n1) RESPONSIVENESS - zvyšují rychlost odezvy aplikace vůči uživateli, když je část aplikace blokována nebo provádí náročnou operaci (prohlížeč umožňuje interakci s uživatele a v jiném vlákně nahrává obrázek).\n\n2) RESOURCE SHARING - vlákna sdílejí pamět’, zdroje a kód procesu (více různých vláken aktivit ve stejném adr. prostoru).\n\n3) ECONOMY - díky sdílení zdrojů je vytváření a přepínání kontextu vláken mnohem úspornější.\n\n• Vlákna mohou být v systémech podporována na dvou úrovních:\n\n1) UŽIVATELSKÁ VLÁKNA (user threads) jsou spravována na uživatelské úrovni, bez účasti jádra operačního systému.\n\n2) VLÁKNA JÁDRA (kernel threads) jsou podporována a spravována přímo operačním systémem.\n\n----\n\n== PLÁNOVÁNÍ PROCESŮ ==\n\n• V OS, který umožňuje souběžný běh více procesů. \n\n• Z hlediska multiprogramování je klíčová maximalizace využití procesoru. \n\n• Z pohledu sdílení času (time sharing) je důležitá frekvence přepínání procesoru (CPU) mezi jednotlivé procesy takovým způsobem, aby byl uživatel schopen komunikovat s každou spuštěnou aplikací (tj. procesem). \n\n• Používá se plánovač procesů (process scheduler), který vybírá nejvhodnější proces pro běh v daném okamžiku. \n\n• V počítačových systémech, které mají pouze jeden procesor, může reálně běžet pouze jeden proces – pokud je jich spuštěno více, musí ostatní čekat, až plánovač procesů rozhodne o jejich přidělení procesoru.\n\n----\n\n==== PLÁNOVACÍ FRONTA ====\n\n• Když proces vstupuje do systému, je vložen do fronty úloh (JOB QUEUE), která obsahuje všechny procesy v systému. \n\n• Procesy v hlavní paměti připravené k běhu čekají na přidělení procesoru ve frontě připravených procesů (READY QUEUE). \n\n• Seznam procesů čekajících na příslušné vstupně-výstupní zařízení je nazýváno fronta zařízení (DEVICE QUEUE). Každé zařízení má svou frontu. Prvky fronty jsou PCB jednotlivých procesů. Hlavička fronty obsahuje ukazatel na první a poslední PCB ve frontě.\n\n----\n\n==== PLÁNOVAČ ====\n\n• V okamžiku, kdy se procesor uvolní, musí OS vybrat jeden z procesů, který je umístěn ve frontě připravených procesů. \n\n• Výběr je prováděn krátkodobým plánovačem (short-term scheduler), ten vybírá procesy podle implementovaného algoritmu. \n\n• NEPREEMPTIVNÍ PLÁNOVÁNÍ - pokud je proces jednou přidělen procesoru, tento proces si drží procesor, dokud ho sám neuvolní bud’ svým ukončením nebo přepnutím do stavu čekání. Např. plánovače používané v některých OS Windows.\n\n• PREEMPTIVNÍ PLÁNOVÁNÍ - k přepnutí kontextu dochází na základě vnějšího podnětu (přerušení), typicky od časovače. K přepnutí kontextu tedy může dojít kdykoliv a proces nemá přímou kontrolu nad dobou svého běhu.\n\n• Rozhodnutí o přeplánování procesů může vzniknout:\n\n1) když se proces přepne ze stavu běžící do stavu čekající (např. při vstupněvýstupní operaci) (nepreemptivní).\n\n2) když se proces přepne ze stavu běžící do stavu připravený (např. při přerušení) (preemptivní).\n\n3) když se proces přepne ze stavu čekající do stavu připravený (např. při dokončení vstupně-výstupní operace) (preemptivní).\n\n4) když se proces ukončí (nepreemptivní).\n\n----\n\n==== PLÁNOVACÍ KRITÉRIA ====\n\n• Různé plánovací algoritmy mají různé vlastnosti, které mohou favorizovat jednu třídu procesů nad ostatními. Pro porovnání různých algoritmůlze využít plánovací kritéria, na základě kterých provádějí tyto algoritmy plánování.\n\n1) Využití procesoru (CPU utilization).\n\n2) Propustnost (Throughput).\n\n3) Doba běhu (Turnaround).\n\n4) Doba čekání (Waiting time).\n\n5) Doba odezvy (Response time).\n\n==== PLÁNOVACÍ ALGORITMY ====\n\n====== FIST COME FIRST SERVED (FCFS) ======\n\n• Nejjednodušší plánovací algoritmus, nepreemptivní, má velkou dobu čekání.\n\n• Proces, který požaduje procesor jako první, dostane přidělen procesor jako první. \n\n• Formou fronty FIFO (First In First Out) - vstupující je zařazen na konec fronty, procesor se přiděluje procesu ze začátku fronty.\n\n====== SHORTEST JOB FIRST (SJF) ======\n\n• Rozhoduje o přidělení procesoru podle doby následného obsazení procesoru (CPU burst-time) daným procesem. \n\n• Pokud je hodnota shodná u více procesů, vybere se na základě algoritmu FCFS.\n\n• Jde vlastně o prioritní plánování, kde je priorita určena časem trvání. \n\n====== PRIORITNÍ PLÁNOVÁNÍ (PRIORITY SCHEDULING) ======\n\n• V tomto plánovacím algoritmu je každému procesu přiřazena priorita a procesor je vždy přidělen procesu s nejvyšší prioritou.\n\n• Procesy se stejnou prioritou jsou plánovány podle algoritmu FCFS. \n\n====== ROUND-ROBIN ======\n\n• Fronta připravených procesů je implementovaná jako kruhová fronta. Plánovač postupně prochází frontou a přiděluje procesor jednotlivým procesům nejvýše po dobu jednoho časového kvanta (obecně v rozsahu 10 až 100 milisekund).\n\n• Preemptivní obdoba algoritmu FCFS. \n\n• Po přidělení procesoru se nastaví časovač tak, aby generoval přerušení po uběhnutí jednoho časového kvanta.\n\n• Při běhu procesu mohou nastat tyto dva případy:\n\n1) Doba obsazení procesoru je menší než časové kvantum. Proces se sám vzdává procesoru (např. při vstupně-výstupní operaci).\n\n2) Doba obsazení procesoru je větší než časové kvantum. Po uplynutí časového kvanta generuje časovač přerušení. Dojde k přepnutí kontextu a proces je vložen na konec fronty připravených procesů.\n\n====== VÍCEÚROVŇOVÉ PRIORITNÍ PLÁNOVÁNÍ ======\n\n• Víceúrovňové plánování patří do speciální kategorie plánovacích algoritmů. Je určeno pro situace, kdy potřebujeme rozdělit procesy na různé kategorie, nad kterými je výhodnější používat různé plánovací algoritmy, optimalizované na jiná kritéria.\n\n• V systémech typu Unix/Linux.\n\n====== DYNAMICKÁ ZMĚNA PRIORIT ======\n\n• Pokud proces spotřeboval v určitém časovém úseku hodně procesorového času, jeho priorita se dynamicky snižuje. \n\n• Důsledkem je rychlejší reakce procesů čekajících na vstupní reakce a mají tedy malou spotřebu času procesoru. \n\n• Procesy s velmi malou počáteční prioritou mají šanci, že se jejich priorita časem zvýší a bude pro ně naplánován procesor.\n\n• V systémech typu Unix/Linux. \n\n----\n\n==== PROBLÉMY SPOJENÉ S PRIORITNÍM PLÁNOVÁNÍM ====\n\n====== PROBLÉM VYHLADOVĚNÍ ======\n\n• Proces, který je připraven k běhu, nedostane přidělen procesor, protože ten je neustále přidělován vice prioritním procesům.\n\n• Řešením tohoto může být přidělení určitého časového kvanta skupině procesů se stejnou prioritou. Po vyčerpání kvanta se začnou plánovat procesy s nižší prioritou. \n\n• Jiným řešením může být explicitní kontrola, zda někdo nehladoví.\n\n====== PROBLÉM INVERZE PRIORIT ======\n\n• Nízko prioritní proces má a lokovaný nějaký zdroj a je blokován více prioritními procesy. Nízko prioritní zdroj tedy nemůže dokončit operaci s daným zdrojem a blokuje ho.\n\n====== VÍCEPROCESOROVÉ SYSTÉMY ======\n\n• Nutnost vyvažovat výkon.\n\n====== REAL-TIME SYSTÉMY ======\n\n• Nutnost zajistit garantovanou odezvu některých akcí.\n\n----\n\n== KOMUNIKACE PROCESŮ ==\n\n• Procesy mohou mezi sebou komunikovat prostřednictvím prostředků, které se souhrnně označují jako meziprocesová komunikace (Inter-Process Communication – IPC). Mezi tyto prostředky patří zejména:\n\n1) signály (systémová volání kill, signal, ...)\n\n2) roury (systémová volání pipe, ...)\n\n3) zprávy (systémová volání msgsnd, msgrecv, ...)\n\n4) sdílená pamět’ (systémová volání shmget, shmat, ...)\n\n5) sockety (systémová volání socket, ...)\n\n6) RPC – Remote Procedure Call\n\n==== SIGNÁLY ====\n\n• Číslo (int) zaslané procesu prostrednictvím pro to zvlášte definovaného rozhraní.\n\n• Signály jsou generovány: při chybách (aritmetická chyba, chyba práce s pamětí...), při externích událostech (vypršení časovace, dostupnost I/O, ...), na žádost procesu – IPC (kil, ...).\n\n• Signály často vznikají asynchronně k činnosti programu.\n\n• Mezi implicitní reakce na signál patří: ukončení procesu (případně s generováním core dump), ignorování a pozastavení.\n\n• Lze předefinovat obsluhu všech signálu mimo SIGKIL, SIGSTOP a SIGCONT.\n\n----\n\n== SYNCHRONIZACE PROCESŮ ==\n\n==== ČASOVĚ ZÁVISLÉ CHYBY (RACE CONDITION) ====\n\n• Chyby vznikající při přístupu ke sdíleným zdrojům (sdílená data, sdílená I/O zařízení) kvůli různému pořadí provádění jednotlivých výpočtův systému, tj. kvůli jejich různé relativní rychlosti. \n\n• Ve stejnou chvíli se dva procesy snaží změnit stejnou hodnotu.\n\n• Hrozí pak, že operace proběhne jako neatomická (proběhne částečně).\n\n----\n\n==== PROBLÉM KRITICKÉ SEKCE ====\n\n• Kritickou sekcí nazveme úsek kódu, jehož korektní provádění vyžaduje vzájemné vyloučení vůči jiným úsekům kódu - v daném okamžiku může existovat nanejvýš jeden proces, jehož řízení se nachází v rámci některého z těchto úseků kódu. \n\n• Při práci se sdílenými kritickými sekcemi je zapotřebí zajistit:\n\n1) Vzájemné vyloučení (mutual exclusion), kdy nanejvýš jeden proces (případně určitý počet procesů) může být v daném okamžiku v dané skupině sdílených kritických sekcí.\n\n2) Dostupnost kritické sekce – tj. každý proces by měl mít možnost vstoupit do kritické sekce v konečném čase.\n\n• UVÁZNUTÍ (deadlock) je situace, kdy každý ze skupiny procesů čeká na stav, který by mohl nastat pouze tehdy, kdyby někdo z dané skupiny procesů mohl pokračovat.\n\n• BLOKOVÁNÍ (blocking) je situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. \n\n• STÁRNUTÍ (starvation) je situace, kdy proces čeká na podmínku, která vždy může, ale nemusí nastat. Někdy to bývá tolerováno.\n\n[[Soubor:34_02.JPG]]\n[[Soubor:34_03.JPG]]\n\nAlgoritmy pro vstup do kritické sekce:\n\n====== PETERSONŮV ALGORITMUS ======\n\n• Proces i při vstupu do kritické sekce vyjádří svůj zájem o kritickou sekci nastavením příznaku flag[i], ale současně dá přednost svému protivníkovi nastavením turn na 1-i. Následně proces aktivně čeká, až bud’ jeho protivník nemá o kritickou sekci zájem, nebo mu vrátí přednost ke vstupu do kritické sekce.\n\n====== BAKERY ALGORITMUS ======\n\n• Před vstupem do kritické sekce proces získá lístek, jehož číselná hodnota je větší než čísla přidělená již čekajícím procesům.\n\n====== SEMAFORY ======\n\n• Celočíselná sdílená proměnná přístupná dvěmi atomickými (až na možnost pozastavení, je-li semafor obsazen) operacemi:\n\n1) lock (v některé literatuře též označovaná jako P či wait).\n\n2) unlock (také V či signal).\n\n• Semafor může vpouštět procesy do kritické sekce po jednom (tzv. binární semafor, též označovaný jako tzv. mutex) či po více.\n\n• Při obsazování kritické sekce se hodnota semaforu snižuje, při uvolňování naopak zvyšuje. \n\n• Je-li hodnota semaforu kladná, udává počet procesů, který je ještě možné vpustit do kritické sekce. Je-li tato hodnota nulová znamená to, že kritická sekce je obsazená, ale nikdo na kritickou sekci nečeká. Klesne-li semafor do záporných hodnot znamená to, že kritická sekce je obsazená a navíc příslušný počet procesů na semaforu čeká. Tyto procesy typicky nečekají aktivně, ale jsou pozastaveny a odkaz na ně je uložen ve frontě spojené se semaforem.\n\n====== MONITORY ======\n\n• Abstraktní datový typ, který v sobě zapouzdřuje sdílená data, nad kterými je možno v rámci monitoru implementovat určité operace, přičemž je zaručeno, že v daném okamžiku bude vždy rozpracována pouze jedna z těchto operací. \n\n• Uživatelsky příjemnější.\n\n• Zahrnuje i příslušný inicializační kód pro sdílená data. \n\n• Za běhu na vstupu do monitoru může vzniknout fronta čekajících procesů.\n\n• Pro použití i pro čekání na určitou událost se rozšiřuje o koncept podmínek (conditions). Nad podmínkami deklarovanými v rámci monitoru (například syntaktickou konstrukcí condition c1, c2, ...;) lze užít operace wait (pouze pozastaví) a signal nebo notify (upozorní proces na splnění podmínek).\n\n----\n\n==== KLASICKÉ SYNCHRONIZAČNÍ PROBLÉMY ====\n\n• PRODUCENT A KONZUMENT - jeden generuje data a zasílá je druhému k dalšímu zpracování přes buffer o kapacitě N položek. Když se vyrovnávací pamět’ zaplní, musí čekat producent; je-li buffer prázdný, musí čekat konzument.\n\n• ČTENÁŘI A PÍSAŘI - máme libovolný počet procesů, některé čtou sdílená data, zatímco jiné je modifikují. V daném okamžiku může současně číst libovolný počet čtenářů. Pokud nějaký písař píše, nemůže žádný čtenář číst, ani žádný další písař psát.\n\n• VEČEŘÍCÍ FILOZOFOVÉ - pět filozofů sedí kolem kulatého stolu. Každý má svůj talíř a k jídlu používá čínské hůlky, mezi každými dvěmi filozofy je umístěna jediná hůlka. Aby filozof mohl jíst, musí získat obě hůlky, které se nacházejí po stranách jeho talíře. Pak se může najíst, hůlky vrátit na stůl a přemýšlet, zatímco jí někdo jiný.\n\n[[Soubor:34_04.JPG]]\n\n----\n\n==== UVÁZNUTÍ (DEADLOCK) ====\n\n• Situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. Aby došlo k uváznutí (deadlocku) musí být splněny podmínky:\n\n1) Musí být užito vzájemného vyloučení při přístupu ke sdíleným prostředkům.\n\n2) Ve skupině procesů, které uvázly, jsou procesy, které vlastní alespoň jeden zdroj a čekají na další.\n\n3) Sdílené zdroje jsou uvolňovány až po úplném dokončení jejich použití.\n\n4) Vzniká cyklická závislost na sebe čekajících procesů, proces 1 vlastní zdroje a čeká na zdroj používaný procesem 2, 2 na 3, 3 na 1.\n\nPREVENCE UVÁZNUTÍ\n\n1) U prostředků, které umožňují sdílený přístup, nejsou zámky zapotřebí a nebudeme je tedy zbytečně používat.\n\n2) Proces může žádat o prostředky pouze tehdy, pokud žádné nevlastní.\n\n3) Pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, prostředky jsou mu odebrány a čeká se.\n\n4) Prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším (nebo v jiném pevně daném pořadí).\n\n====== VYHÝBÁNÍ SE UVÁZNUTÍ ======\n\n• Princip je založen na tom, že každý proces před spuštěním deklaruje určité informace o způsobu, jakým bude využívat sdílené zdroje. Ná plánování rozdělení zdrojů se pak používá Bankéřův algoritmus.\n\n====== DETEKCE UVÁZNUTÍ A ZOTAVENÍ ======\n\n• Periodicky (nebo při každé žádosti o zdroje) se kontroluje, zda nedošlo k uváznutí. Pokud ano, pak systém uváznutí odstraní např. tak, že některému procesu odebere některé zdroje a proces pozastaví.\n\n----\n\n==== FORMÁLNÍ VERIFIKACE ====\n\n• Je třeba pokud se nepoužije žádný z mechanizmů prevence, detekce a zotavení. Dokazuje správnost systému.\n\n• Proces formální verifikace:\n\n1) Vytvoření modelu.\n\n2) Specifikace vlastnosti, kterou chceme ověřit.\n\n3) Kontrola, zda model splňuje specifikaci.\n\n• Zakladní přístupy k formální verifikaci:\n\n1) Theorem proving: Využívá poloautomatický dokazovací prostředek. Vyžaduje experta, který určuje, jak se má důkaz vést.\n\n2) Model checking: Využívá automatický prostředek, generování a prohledávání stavového prostoru. Velikost stavového prostoru roste exponenciálně s velikostí modelu.\n\n3) Static analysis: Snaha o ověření příslusných vlastností na základě popisu modelu či system bez jeho provádění.\n\n----\n\n== TRANSAKCE ==\n\n• Skupina operací, které jsou vykonávané jako celek (většinou nad databází). \n\n==== ACID ====\n\n• Transakční systém podporující vykonávání transakcí a zajišťující jejich specifické vlastnosti.\n\nA – atomicity (provede se pouze celá transakce nebo vůbec).\n\nC – consistency (koresponduje s údaji z reálného světa).\n\nI – isolation/independence (transakce probíhají odděleně pomocí sekvenčního zpracování, paralelního nebo díky plánu). \n\nD – durability (trvanlivost – neztrácí se data).\n\n==== MODELY TRANSAKCÍ ====\n\n• Ploché transakce – transakce střídá výpočet s lokáílními proměnnými a vykonávání SQL příkazů, dokud neskončí.\n\n• Strukturované transakce – umožňuje dekompozici transakce a její lepší abstakci atomicity, integrity a trvanlivosti\n\n• Milníky (savepoints) – místo v transakci fungující jako bod pro částečný návrat (databáze se vrátí do stavu, v jakém byla).','utf-8'),(1265,'== PROCES ==\n\n• Je chápán jako program v běhu, jeho instance, která je nahrána do paměti počítačového systému a spuštěna. \n\n• V jednom okamžiku tak mohou být spuštěny instance (procesy) různých, ale i stejných programů.\n\n• Hlavním úkolem operačního systému je zajištění běhu uživatelských procesů. Jelikož procesů může běžet současně více a systémové zdroje jsou omezené, musí procesy tyto zdroje sdílet. Operační systém musí také zajištovat správu přístupů k těmto sdíleným zdrojům. Jedním z těchto zdrojů je i procesor (CPU – Central Processing Unit). \n\n• SPRÁVA PROCESŮ (process management) zahrnuje plánovač (scheduler), který přiděluje procesor (CPU) procesům, správu paměti (memory management) a podporu meziprocesové komunikace (IPC).\n\n==== STAVY ====\n\n1) NOVÝ (New) je právě vytvořený.\n\n2) BĚŽÍCÍ (Running) je přiřazen procesoru a běží, provádějí se jeho instrukce.\n\n3) ČEKAJÍCÍ (Waiting) čeká na výskyt nějaké události, \nnapř. dokončení vstupně výstupní operace.\n\n4) PŘIPRAVENÝ (Ready) čeká na své přiřazení procesoru.\n\n5) UKONČENÝ (Terminated) ukončil svůj běh.\n\n• V systému UNIX se ještě setkáme s následujícími stavy:\n\n6) VYTVOŘENÝ (init) je ještě neinicializovaný.\n\n7) PŘIPRAVENÝ (runnable) by mohl běžet, ale nemá přístup do CPU.\n\n8) BĚŽÍCÍ (running) používá CPU.\n\n9) MÁTOHA (zombified) je po exit, rodič ještě nepřevzal exit-code\n\n10) ČEKAJÍCÍ (sleeping) čeká na událost.\n\n11) ODLOŽENÝ (suspended) ”zmrazený“ signálem SIGSTOP.\n\n• Každý proces končí s návratovou hodnotou, která identifikuje způsob jeho ukončení.\n\n[[Soubor:35_01.JPG]]\n\n----\n\n==== SOUČÁSTI ====\n\n• Instance kódu, sekvence instrukcí, které se postupně provádějí. \n\n• Informace o aktuální pozici (program counter).\n\n• Obsah registrů procesoru, zásobník obsahující dočasná data (parametry metod, lokální proměnné apod.) a další údaje v závislosti na hostitelském prostředí.\n\n• Obecně je proces v operačním systému definován následujícími vlastnostmi (uloženy ve struktuře process control block (PCB)).\n\n====== PCB ======\n\n• PCB (Process Control Block) nebo task control block, task struct…\n\n• Struktura pro uložení informací o procesu. Může být také rozdělen do několika dílčích struktur.\n\n• PCB zahrnuje:\n\n1) identifikátor (PID)\n\n2) stav jeho plánování\n\n3) program, kterým je řízen\n\n4) obsah registrů (včetně EIP a ESP apod.)\n\n5) data a zásobník\n\n6) využití dalších zdrojů OS a vazba na další objekty OS (otevřené soubory, signály atd.)\n\n7) plánovací informace (priorita, ukazatele na plánovací fronty, ...)\n\n8) informace spojené se správou paměti (tabulky stránek, ...),\n\n9) informace spojené s účtováním (spotreba procesoru, ...),\n\n10) využití I/O zdrojů (otevrené soubory, používaná zarízení., ...).\n\n----\n\n==== PROCES V UNIXU ====\n\n====== IDENTIFIKÁTORY ======\n\n• identifikace procesu PID\n\n• identifikace předka procesu PPID\n\n• reálný (skutečný) uživatel UID, skupina uživatelů GID\n\n• efektivní uživatel EUID, skupina uživatelů EGID\n\n• uložená EUID, uložená EGID (v Linuxu navíc FSUID a FSGID)\n\n• skupina procesů PGID a sezení SID, do kterých proces patří\n\n====== ČÁSTI PROCESU V PAMĚTI ======\n\n\'\'\'UŽIVATELSKÝ ADRESOVÝ PROSTOR (USER ADDRESS SPACE)\'\'\' \n\n• Je prostor obsahující:\n\n1) kód (code area/text segment)\n\n2) data (inicializovaná/neinicializovaná data, heap)\n\n3) zásobník\n\n4) soukromá data sdílených knihoven, sdílené knihovny, sdílená pamet’\n\n\'\'\'UŽIVATELSKÁ OBLAST (USER AREA)\'\'\'\n\n• Uložena zvlášť pro každý proces spolu s daty, kódem a zásobníkem v user address space procesu.\n\n• Je přístupná pouze jádru.\n\n• Obsahuje část PCB, která je používána zejména za běhu procesu:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) obsah registru\n\n3) deskriptory souboru\n\n4) obslužné funkce signálu\n\n5) účtování (spotřebovaný čas CPU...)\n\n6) pracovní a kořenový adresář\n\n\'\'\'ZÁZNAM V TABULCE PROCESU (PROCESS TABLE)\'\'\'\n\n• Uložen trvale v jádru.\n\n• Obsahuje zejména informace o procesu, které jsou důležité, i když proces neběží:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) stav plánování\n\n3) událost, na kterou se čeká\n\n4) plánovací informace (priorita, spotřeba času...)\n\n5) čekající signály\n\n6) odkaz na tabulku paměťových regionů procesu\n\n\'\'\'TABULKA PAMĚTOVÝCH REGIONŮ PROCESU (PER-PROCESS REGION TABLE)\'\'\' \n\n• Popis paměťových regionů procesu (spojitá oblast virtuální paměti použitá pro data, kód, zásobník, sdílenou pamet’) + príslušné položky tabulky regionu, tabulka stránek.\n\n\'\'\'ZÁSOBNÍK JÁDRA\'\'\'\n\n====== KONTEXT PROCESU ======\n\n• Někdy se též používá pojem kontext procesu = stav procesu.\n\n1) uživatelský kontext (user-level context): kód, data, zásobník, sdílená data\n\n2) registrový kontext\n\n3) systémový kontext (system-level context): uživatelská oblast, položka tabulky procesu, tabulka pamětových regionů procesu...\n\n====== SYSTÉMOVÁ VOLÁNÍ NAD PROCESY ======\n\n• fork, exe, exit, wait, kil, signal, getpid, getpid\n\n====== VYTVÁŘENÍ PROCESU ======\n\n• Vytváření procesu – služba fork: duplikuje proces, vytvoří potomka (vztah rodič–potomek (parent–child), hierarchie procesu).\n\n====== HIERARCHIE PROCESU ======\n\n• Předkem všech uživatelských procesu je init s PID = 1.\n\n• Procesy jádra, jejichž předkem není init:\n\n1) Naprosto prvním procesem (PID = 0) bývá SWAPPER (na Linuxu pouze idle, nevypisuje se).\n\n2) Mezi další procesy jádra (kód součástí jádra), jejichž předkem není init, muže pařit napr. pagedaemon.\n\n• Pokud procesu skoncí předek, jeho předkem se automaticky stane init, který později převezme jeho návratový kód (proces nemůže definitivně skončit a jako zombie čeká, dokud neodevzdá návratový kód).\n\n====== START SYSTÉMU ======\n\n• Posloupnost akcí při startu systému:\n\n1) BIOS\n\n2) Načtení a spuštení zavaděce (mbr, boot block).\n\n3) Načtení a spuštení jádra.\n\n4) Jádro vytvoří proces swapper, ten vytvoří případné další procesy jádra a proces init, případne se vytvoří přímo proces init.\n\n5) Init nacítá inicializační konfigurace a spouští další démony a procesy.\n\n• V UNIXu System V byl zaveden systém úrovní behu – SYSV init run-levels: 0-6, s/S (0=halt, 1=single user, s/S=alternativní přechod do single user, 6=reboot). Změna úrovně běhu: telinit N.\n\n===== PŘEPNUTÍ KONTEXTU PROCESU =======\n\n• Přepnutí procesoru (CPU) na jiný proces vyžaduje uložení stavu starého procesu, který dosud používal CPU, a nahrání uloženého stavu nového procesu. Tato úloha je označována jako přepnutí kontextu. Kontext procesu je reprezentován jeho PCB.\n\n• Princip: Plánovač odebere procesor procesu P0, uloží jeho stav do PCB0, obnoví stav procesu P1 z jeho PCB1 a přidělí procesor procesu P1. Přepnutí kontextu je spojeno s režií – přepnutí trvá stovky až tisíce instrukcí. Všechny informace a data, která jsou s během procesu spojena, není nutno ukládat a poté obnovovat - je možné režii spojenou s přepnutím kontextu snížit.\n\n----\n\n== VLÁKNA ==\n\n• Definováno svým identifikátorem (thread ID), aktuální pozicí v programu (program counter), množinou registrů a zásobníkem. \n\n• Pokud má proces více vláken, je schopen vykonávat více úloh současně.\n\n• Vícevláknové procesy mají proti jednovláknovému procesu vlastnosti, které jsou klíčové z hlediska jejich použitelnosti, zejména:\n\n1) RESPONSIVENESS - zvyšují rychlost odezvy aplikace vůči uživateli, když je část aplikace blokována nebo provádí náročnou operaci (prohlížeč umožňuje interakci s uživatele a v jiném vlákně nahrává obrázek).\n\n2) RESOURCE SHARING - vlákna sdílejí pamět’, zdroje a kód procesu (více různých vláken aktivit ve stejném adr. prostoru).\n\n3) ECONOMY - díky sdílení zdrojů je vytváření a přepínání kontextu vláken mnohem úspornější.\n\n• Vlákna mohou být v systémech podporována na dvou úrovních:\n\n1) UŽIVATELSKÁ VLÁKNA (user threads) jsou spravována na uživatelské úrovni, bez účasti jádra operačního systému.\n\n2) VLÁKNA JÁDRA (kernel threads) jsou podporována a spravována přímo operačním systémem.\n\n----\n\n== PLÁNOVÁNÍ PROCESŮ ==\n\n• V OS, který umožňuje souběžný běh více procesů. \n\n• Z hlediska multiprogramování je klíčová maximalizace využití procesoru. \n\n• Z pohledu sdílení času (time sharing) je důležitá frekvence přepínání procesoru (CPU) mezi jednotlivé procesy takovým způsobem, aby byl uživatel schopen komunikovat s každou spuštěnou aplikací (tj. procesem). \n\n• Používá se plánovač procesů (process scheduler), který vybírá nejvhodnější proces pro běh v daném okamžiku. \n\n• V počítačových systémech, které mají pouze jeden procesor, může reálně běžet pouze jeden proces – pokud je jich spuštěno více, musí ostatní čekat, až plánovač procesů rozhodne o jejich přidělení procesoru.\n\n----\n\n==== PLÁNOVACÍ FRONTA ====\n\n• Když proces vstupuje do systému, je vložen do fronty úloh (JOB QUEUE), která obsahuje všechny procesy v systému. \n\n• Procesy v hlavní paměti připravené k běhu čekají na přidělení procesoru ve frontě připravených procesů (READY QUEUE). \n\n• Seznam procesů čekajících na příslušné vstupně-výstupní zařízení je nazýváno fronta zařízení (DEVICE QUEUE). Každé zařízení má svou frontu. Prvky fronty jsou PCB jednotlivých procesů. Hlavička fronty obsahuje ukazatel na první a poslední PCB ve frontě.\n\n----\n\n==== PLÁNOVAČ ====\n\n• V okamžiku, kdy se procesor uvolní, musí OS vybrat jeden z procesů, který je umístěn ve frontě připravených procesů. \n\n• Výběr je prováděn krátkodobým plánovačem (short-term scheduler), ten vybírá procesy podle implementovaného algoritmu. \n\n• NEPREEMPTIVNÍ PLÁNOVÁNÍ - pokud je proces jednou přidělen procesoru, tento proces si drží procesor, dokud ho sám neuvolní bud’ svým ukončením nebo přepnutím do stavu čekání. Např. plánovače používané v některých OS Windows.\n\n• PREEMPTIVNÍ PLÁNOVÁNÍ - k přepnutí kontextu dochází na základě vnějšího podnětu (přerušení), typicky od časovače. K přepnutí kontextu tedy může dojít kdykoliv a proces nemá přímou kontrolu nad dobou svého běhu.\n\n• Rozhodnutí o přeplánování procesů může vzniknout:\n\n1) když se proces přepne ze stavu běžící do stavu čekající (např. při vstupněvýstupní operaci) (nepreemptivní).\n\n2) když se proces přepne ze stavu běžící do stavu připravený (např. při přerušení) (preemptivní).\n\n3) když se proces přepne ze stavu čekající do stavu připravený (např. při dokončení vstupně-výstupní operace) (preemptivní).\n\n4) když se proces ukončí (nepreemptivní).\n\n----\n\n==== PLÁNOVACÍ KRITÉRIA ====\n\n• Různé plánovací algoritmy mají různé vlastnosti, které mohou favorizovat jednu třídu procesů nad ostatními. Pro porovnání různých algoritmůlze využít plánovací kritéria, na základě kterých provádějí tyto algoritmy plánování.\n\n1) Využití procesoru (CPU utilization).\n\n2) Propustnost (Throughput).\n\n3) Doba běhu (Turnaround).\n\n4) Doba čekání (Waiting time).\n\n5) Doba odezvy (Response time).\n\n==== PLÁNOVACÍ ALGORITMY ====\n\n====== FIST COME FIRST SERVED (FCFS) ======\n\n• Nejjednodušší plánovací algoritmus, nepreemptivní, má velkou dobu čekání.\n\n• Proces, který požaduje procesor jako první, dostane přidělen procesor jako první. \n\n• Formou fronty FIFO (First In First Out) - vstupující je zařazen na konec fronty, procesor se přiděluje procesu ze začátku fronty.\n\n====== SHORTEST JOB FIRST (SJF) ======\n\n• Rozhoduje o přidělení procesoru podle doby následného obsazení procesoru (CPU burst-time) daným procesem. \n\n• Pokud je hodnota shodná u více procesů, vybere se na základě algoritmu FCFS.\n\n• Jde vlastně o prioritní plánování, kde je priorita určena časem trvání. \n\n====== PRIORITNÍ PLÁNOVÁNÍ (PRIORITY SCHEDULING) ======\n\n• V tomto plánovacím algoritmu je každému procesu přiřazena priorita a procesor je vždy přidělen procesu s nejvyšší prioritou.\n\n• Procesy se stejnou prioritou jsou plánovány podle algoritmu FCFS. \n\n====== ROUND-ROBIN ======\n\n• Fronta připravených procesů je implementovaná jako kruhová fronta. Plánovač postupně prochází frontou a přiděluje procesor jednotlivým procesům nejvýše po dobu jednoho časového kvanta (obecně v rozsahu 10 až 100 milisekund).\n\n• Preemptivní obdoba algoritmu FCFS. \n\n• Po přidělení procesoru se nastaví časovač tak, aby generoval přerušení po uběhnutí jednoho časového kvanta.\n\n• Při běhu procesu mohou nastat tyto dva případy:\n\n1) Doba obsazení procesoru je menší než časové kvantum. Proces se sám vzdává procesoru (např. při vstupně-výstupní operaci).\n\n2) Doba obsazení procesoru je větší než časové kvantum. Po uplynutí časového kvanta generuje časovač přerušení. Dojde k přepnutí kontextu a proces je vložen na konec fronty připravených procesů.\n\n====== VÍCEÚROVŇOVÉ PRIORITNÍ PLÁNOVÁNÍ ======\n\n• Víceúrovňové plánování patří do speciální kategorie plánovacích algoritmů. Je určeno pro situace, kdy potřebujeme rozdělit procesy na různé kategorie, nad kterými je výhodnější používat různé plánovací algoritmy, optimalizované na jiná kritéria.\n\n• V systémech typu Unix/Linux.\n\n====== DYNAMICKÁ ZMĚNA PRIORIT ======\n\n• Pokud proces spotřeboval v určitém časovém úseku hodně procesorového času, jeho priorita se dynamicky snižuje. \n\n• Důsledkem je rychlejší reakce procesů čekajících na vstupní reakce a mají tedy malou spotřebu času procesoru. \n\n• Procesy s velmi malou počáteční prioritou mají šanci, že se jejich priorita časem zvýší a bude pro ně naplánován procesor.\n\n• V systémech typu Unix/Linux. \n\n----\n\n==== PROBLÉMY SPOJENÉ S PRIORITNÍM PLÁNOVÁNÍM ====\n\n====== PROBLÉM VYHLADOVĚNÍ ======\n\n• Proces, který je připraven k běhu, nedostane přidělen procesor, protože ten je neustále přidělován vice prioritním procesům.\n\n• Řešením tohoto může být přidělení určitého časového kvanta skupině procesů se stejnou prioritou. Po vyčerpání kvanta se začnou plánovat procesy s nižší prioritou. \n\n• Jiným řešením může být explicitní kontrola, zda někdo nehladoví.\n\n====== PROBLÉM INVERZE PRIORIT ======\n\n• Nízko prioritní proces má a lokovaný nějaký zdroj a je blokován více prioritními procesy. Nízko prioritní zdroj tedy nemůže dokončit operaci s daným zdrojem a blokuje ho.\n\n====== VÍCEPROCESOROVÉ SYSTÉMY ======\n\n• Nutnost vyvažovat výkon.\n\n====== REAL-TIME SYSTÉMY ======\n\n• Nutnost zajistit garantovanou odezvu některých akcí.\n\n----\n\n== KOMUNIKACE PROCESŮ ==\n\n• Procesy mohou mezi sebou komunikovat prostřednictvím prostředků, které se souhrnně označují jako meziprocesová komunikace (Inter-Process Communication – IPC). Mezi tyto prostředky patří zejména:\n\n1) signály (systémová volání kill, signal, ...)\n\n2) roury (systémová volání pipe, ...)\n\n3) zprávy (systémová volání msgsnd, msgrecv, ...)\n\n4) sdílená pamět’ (systémová volání shmget, shmat, ...)\n\n5) sockety (systémová volání socket, ...)\n\n6) RPC – Remote Procedure Call\n\n==== SIGNÁLY ====\n\n• Číslo (int) zaslané procesu prostrednictvím pro to zvlášte definovaného rozhraní.\n\n• Signály jsou generovány: při chybách (aritmetická chyba, chyba práce s pamětí...), při externích událostech (vypršení časovace, dostupnost I/O, ...), na žádost procesu – IPC (kil, ...).\n\n• Signály často vznikají asynchronně k činnosti programu.\n\n• Mezi implicitní reakce na signál patří: ukončení procesu (případně s generováním core dump), ignorování a pozastavení.\n\n• Lze předefinovat obsluhu všech signálu mimo SIGKIL, SIGSTOP a SIGCONT.\n\n----\n\n== SYNCHRONIZACE PROCESŮ ==\n\n==== ČASOVĚ ZÁVISLÉ CHYBY (RACE CONDITION) ====\n\n• Chyby vznikající při přístupu ke sdíleným zdrojům (sdílená data, sdílená I/O zařízení) kvůli různému pořadí provádění jednotlivých výpočtův systému, tj. kvůli jejich různé relativní rychlosti. \n\n• Ve stejnou chvíli se dva procesy snaží změnit stejnou hodnotu.\n\n• Hrozí pak, že operace proběhne jako neatomická (proběhne částečně).\n\n----\n\n==== PROBLÉM KRITICKÉ SEKCE ====\n\n• Kritickou sekcí nazveme úsek kódu, jehož korektní provádění vyžaduje vzájemné vyloučení vůči jiným úsekům kódu - v daném okamžiku může existovat nanejvýš jeden proces, jehož řízení se nachází v rámci některého z těchto úseků kódu. \n\n• Při práci se sdílenými kritickými sekcemi je zapotřebí zajistit:\n\n1) Vzájemné vyloučení (mutual exclusion), kdy nanejvýš jeden proces (případně určitý počet procesů) může být v daném okamžiku v dané skupině sdílených kritických sekcí.\n\n2) Dostupnost kritické sekce – tj. každý proces by měl mít možnost vstoupit do kritické sekce v konečném čase.\n\n• UVÁZNUTÍ (deadlock) je situace, kdy každý ze skupiny procesů čeká na stav, který by mohl nastat pouze tehdy, kdyby někdo z dané skupiny procesů mohl pokračovat.\n\n• BLOKOVÁNÍ (blocking) je situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. \n\n• STÁRNUTÍ (starvation) je situace, kdy proces čeká na podmínku, která vždy může, ale nemusí nastat. Někdy to bývá tolerováno.\n\n[[Soubor:35_02.JPG]]\n[[Soubor:35_03.JPG]]\n\nAlgoritmy pro vstup do kritické sekce:\n\n====== PETERSONŮV ALGORITMUS ======\n\n• Proces i při vstupu do kritické sekce vyjádří svůj zájem o kritickou sekci nastavením příznaku flag[i], ale současně dá přednost svému protivníkovi nastavením turn na 1-i. Následně proces aktivně čeká, až bud’ jeho protivník nemá o kritickou sekci zájem, nebo mu vrátí přednost ke vstupu do kritické sekce.\n\n====== BAKERY ALGORITMUS ======\n\n• Před vstupem do kritické sekce proces získá lístek, jehož číselná hodnota je větší než čísla přidělená již čekajícím procesům.\n\n====== SEMAFORY ======\n\n• Celočíselná sdílená proměnná přístupná dvěmi atomickými (až na možnost pozastavení, je-li semafor obsazen) operacemi:\n\n1) lock (v některé literatuře též označovaná jako P či wait).\n\n2) unlock (také V či signal).\n\n• Semafor může vpouštět procesy do kritické sekce po jednom (tzv. binární semafor, též označovaný jako tzv. mutex) či po více.\n\n• Při obsazování kritické sekce se hodnota semaforu snižuje, při uvolňování naopak zvyšuje. \n\n• Je-li hodnota semaforu kladná, udává počet procesů, který je ještě možné vpustit do kritické sekce. Je-li tato hodnota nulová znamená to, že kritická sekce je obsazená, ale nikdo na kritickou sekci nečeká. Klesne-li semafor do záporných hodnot znamená to, že kritická sekce je obsazená a navíc příslušný počet procesů na semaforu čeká. Tyto procesy typicky nečekají aktivně, ale jsou pozastaveny a odkaz na ně je uložen ve frontě spojené se semaforem.\n\n====== MONITORY ======\n\n• Abstraktní datový typ, který v sobě zapouzdřuje sdílená data, nad kterými je možno v rámci monitoru implementovat určité operace, přičemž je zaručeno, že v daném okamžiku bude vždy rozpracována pouze jedna z těchto operací. \n\n• Uživatelsky příjemnější.\n\n• Zahrnuje i příslušný inicializační kód pro sdílená data. \n\n• Za běhu na vstupu do monitoru může vzniknout fronta čekajících procesů.\n\n• Pro použití i pro čekání na určitou událost se rozšiřuje o koncept podmínek (conditions). Nad podmínkami deklarovanými v rámci monitoru (například syntaktickou konstrukcí condition c1, c2, ...;) lze užít operace wait (pouze pozastaví) a signal nebo notify (upozorní proces na splnění podmínek).\n\n----\n\n==== KLASICKÉ SYNCHRONIZAČNÍ PROBLÉMY ====\n\n• PRODUCENT A KONZUMENT - jeden generuje data a zasílá je druhému k dalšímu zpracování přes buffer o kapacitě N položek. Když se vyrovnávací pamět’ zaplní, musí čekat producent; je-li buffer prázdný, musí čekat konzument.\n\n• ČTENÁŘI A PÍSAŘI - máme libovolný počet procesů, některé čtou sdílená data, zatímco jiné je modifikují. V daném okamžiku může současně číst libovolný počet čtenářů. Pokud nějaký písař píše, nemůže žádný čtenář číst, ani žádný další písař psát.\n\n• VEČEŘÍCÍ FILOZOFOVÉ - pět filozofů sedí kolem kulatého stolu. Každý má svůj talíř a k jídlu používá čínské hůlky, mezi každými dvěmi filozofy je umístěna jediná hůlka. Aby filozof mohl jíst, musí získat obě hůlky, které se nacházejí po stranách jeho talíře. Pak se může najíst, hůlky vrátit na stůl a přemýšlet, zatímco jí někdo jiný.\n\n[[Soubor:35_04.JPG]]\n\n----\n\n==== UVÁZNUTÍ (DEADLOCK) ====\n\n• Situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. Aby došlo k uváznutí (deadlocku) musí být splněny podmínky:\n\n1) Musí být užito vzájemného vyloučení při přístupu ke sdíleným prostředkům.\n\n2) Ve skupině procesů, které uvázly, jsou procesy, které vlastní alespoň jeden zdroj a čekají na další.\n\n3) Sdílené zdroje jsou uvolňovány až po úplném dokončení jejich použití.\n\n4) Vzniká cyklická závislost na sebe čekajících procesů, proces 1 vlastní zdroje a čeká na zdroj používaný procesem 2, 2 na 3, 3 na 1.\n\nPREVENCE UVÁZNUTÍ\n\n1) U prostředků, které umožňují sdílený přístup, nejsou zámky zapotřebí a nebudeme je tedy zbytečně používat.\n\n2) Proces může žádat o prostředky pouze tehdy, pokud žádné nevlastní.\n\n3) Pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, prostředky jsou mu odebrány a čeká se.\n\n4) Prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším (nebo v jiném pevně daném pořadí).\n\n====== VYHÝBÁNÍ SE UVÁZNUTÍ ======\n\n• Princip je založen na tom, že každý proces před spuštěním deklaruje určité informace o způsobu, jakým bude využívat sdílené zdroje. Ná plánování rozdělení zdrojů se pak používá Bankéřův algoritmus.\n\n====== DETEKCE UVÁZNUTÍ A ZOTAVENÍ ======\n\n• Periodicky (nebo při každé žádosti o zdroje) se kontroluje, zda nedošlo k uváznutí. Pokud ano, pak systém uváznutí odstraní např. tak, že některému procesu odebere některé zdroje a proces pozastaví.\n\n----\n\n==== FORMÁLNÍ VERIFIKACE ====\n\n• Je třeba pokud se nepoužije žádný z mechanizmů prevence, detekce a zotavení. Dokazuje správnost systému.\n\n• Proces formální verifikace:\n\n1) Vytvoření modelu.\n\n2) Specifikace vlastnosti, kterou chceme ověřit.\n\n3) Kontrola, zda model splňuje specifikaci.\n\n• Zakladní přístupy k formální verifikaci:\n\n1) Theorem proving: Využívá poloautomatický dokazovací prostředek. Vyžaduje experta, který určuje, jak se má důkaz vést.\n\n2) Model checking: Využívá automatický prostředek, generování a prohledávání stavového prostoru. Velikost stavového prostoru roste exponenciálně s velikostí modelu.\n\n3) Static analysis: Snaha o ověření příslusných vlastností na základě popisu modelu či system bez jeho provádění.\n\n----\n\n== TRANSAKCE ==\n\n• Skupina operací, které jsou vykonávané jako celek (většinou nad databází). \n\n==== ACID ====\n\n• Transakční systém podporující vykonávání transakcí a zajišťující jejich specifické vlastnosti.\n\nA – atomicity (provede se pouze celá transakce nebo vůbec).\n\nC – consistency (koresponduje s údaji z reálného světa).\n\nI – isolation/independence (transakce probíhají odděleně pomocí sekvenčního zpracování, paralelního nebo díky plánu). \n\nD – durability (trvanlivost – neztrácí se data).\n\n==== MODELY TRANSAKCÍ ====\n\n• Ploché transakce – transakce střídá výpočet s lokáílními proměnnými a vykonávání SQL příkazů, dokud neskončí.\n\n• Strukturované transakce – umožňuje dekompozici transakce a její lepší abstakci atomicity, integrity a trvanlivosti\n\n• Milníky (savepoints) – místo v transakci fungující jako bod pro částečný návrat (databáze se vrátí do stavu, v jakém byla).','utf-8'),(1266,'== PROCES ==\n\n• Je chápán jako program v běhu, jeho instance, která je nahrána do paměti počítačového systému a spuštěna. \n\n• V jednom okamžiku tak mohou být spuštěny instance (procesy) různých, ale i stejných programů.\n\n• Hlavním úkolem operačního systému je zajištění běhu uživatelských procesů. Jelikož procesů může běžet současně více a systémové zdroje jsou omezené, musí procesy tyto zdroje sdílet. Operační systém musí také zajištovat správu přístupů k těmto sdíleným zdrojům. Jedním z těchto zdrojů je i procesor (CPU – Central Processing Unit). \n\n• SPRÁVA PROCESŮ (process management) zahrnuje plánovač (scheduler), který přiděluje procesor (CPU) procesům, správu paměti (memory management) a podporu meziprocesové komunikace (IPC).\n\n==== STAVY ====\n\n1) NOVÝ (New) je právě vytvořený.\n\n2) BĚŽÍCÍ (Running) je přiřazen procesoru a běží, provádějí se jeho instrukce.\n\n3) ČEKAJÍCÍ (Waiting) čeká na výskyt nějaké události, \nnapř. dokončení vstupně výstupní operace.\n\n4) PŘIPRAVENÝ (Ready) čeká na své přiřazení procesoru.\n\n5) UKONČENÝ (Terminated) ukončil svůj běh.\n\n• V systému UNIX se ještě setkáme s následujícími stavy:\n\n6) VYTVOŘENÝ (init) je ještě neinicializovaný.\n\n7) PŘIPRAVENÝ (runnable) by mohl běžet, ale nemá přístup do CPU.\n\n8) BĚŽÍCÍ (running) používá CPU.\n\n9) MÁTOHA (zombified) je po exit, rodič ještě nepřevzal exit-code\n\n10) ČEKAJÍCÍ (sleeping) čeká na událost.\n\n11) ODLOŽENÝ (suspended) ”zmrazený“ signálem SIGSTOP.\n\n• Každý proces končí s návratovou hodnotou, která identifikuje způsob jeho ukončení.\n\n[[Soubor:35_01.JPG]]\n\n----\n\n==== SOUČÁSTI ====\n\n• Instance kódu, sekvence instrukcí, které se postupně provádějí. \n\n• Informace o aktuální pozici (program counter).\n\n• Obsah registrů procesoru, zásobník obsahující dočasná data (parametry metod, lokální proměnné apod.) a další údaje v závislosti na hostitelském prostředí.\n\n• Obecně je proces v operačním systému definován následujícími vlastnostmi (uloženy ve struktuře process control block (PCB)).\n\n====== PCB ======\n\n• PCB (Process Control Block) nebo task control block, task struct…\n\n• Struktura pro uložení informací o procesu. Může být také rozdělen do několika dílčích struktur.\n\n• PCB zahrnuje:\n\n1) identifikátor (PID)\n\n2) stav jeho plánování\n\n3) program, kterým je řízen\n\n4) obsah registrů (včetně EIP a ESP apod.)\n\n5) data a zásobník\n\n6) využití dalších zdrojů OS a vazba na další objekty OS (otevřené soubory, signály atd.)\n\n7) plánovací informace (priorita, ukazatele na plánovací fronty, ...)\n\n8) informace spojené se správou paměti (tabulky stránek, ...),\n\n9) informace spojené s účtováním (spotreba procesoru, ...),\n\n10) využití I/O zdrojů (otevrené soubory, používaná zarízení., ...).\n\n----\n\n==== PROCES V UNIXU ====\n\n====== IDENTIFIKÁTORY ======\n\n• identifikace procesu PID\n\n• identifikace předka procesu PPID\n\n• reálný (skutečný) uživatel UID, skupina uživatelů GID\n\n• efektivní uživatel EUID, skupina uživatelů EGID\n\n• uložená EUID, uložená EGID (v Linuxu navíc FSUID a FSGID)\n\n• skupina procesů PGID a sezení SID, do kterých proces patří\n\n====== ČÁSTI PROCESU V PAMĚTI ======\n\n\'\'\'UŽIVATELSKÝ ADRESOVÝ PROSTOR (USER ADDRESS SPACE)\'\'\' \n\n• Je prostor obsahující:\n\n1) kód (code area/text segment)\n\n2) data (inicializovaná/neinicializovaná data, heap)\n\n3) zásobník\n\n4) soukromá data sdílených knihoven, sdílené knihovny, sdílená pamet’\n\n\'\'\'UŽIVATELSKÁ OBLAST (USER AREA)\'\'\'\n\n• Uložena zvlášť pro každý proces spolu s daty, kódem a zásobníkem v user address space procesu.\n\n• Je přístupná pouze jádru.\n\n• Obsahuje část PCB, která je používána zejména za běhu procesu:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) obsah registru\n\n3) deskriptory souboru\n\n4) obslužné funkce signálu\n\n5) účtování (spotřebovaný čas CPU...)\n\n6) pracovní a kořenový adresář\n\n\'\'\'ZÁZNAM V TABULCE PROCESU (PROCESS TABLE)\'\'\'\n\n• Uložen trvale v jádru.\n\n• Obsahuje zejména informace o procesu, které jsou důležité, i když proces neběží:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) stav plánování\n\n3) událost, na kterou se čeká\n\n4) plánovací informace (priorita, spotřeba času...)\n\n5) čekající signály\n\n6) odkaz na tabulku paměťových regionů procesu\n\n\'\'\'TABULKA PAMĚTOVÝCH REGIONŮ PROCESU (PER-PROCESS REGION TABLE)\'\'\' \n\n• Popis paměťových regionů procesu (spojitá oblast virtuální paměti použitá pro data, kód, zásobník, sdílenou pamet’) + príslušné položky tabulky regionu, tabulka stránek.\n\n\'\'\'ZÁSOBNÍK JÁDRA\'\'\'\n\n====== KONTEXT PROCESU ======\n\n• Někdy se též používá pojem kontext procesu = stav procesu.\n\n1) uživatelský kontext (user-level context): kód, data, zásobník, sdílená data\n\n2) registrový kontext\n\n3) systémový kontext (system-level context): uživatelská oblast, položka tabulky procesu, tabulka pamětových regionů procesu...\n\n====== SYSTÉMOVÁ VOLÁNÍ NAD PROCESY ======\n\n• fork, exe, exit, wait, kil, signal, getpid, getpid\n\n====== VYTVÁŘENÍ PROCESU ======\n\n• Vytváření procesu – služba fork: duplikuje proces, vytvoří potomka (vztah rodič–potomek (parent–child), hierarchie procesu).\n\n====== HIERARCHIE PROCESU ======\n\n• Předkem všech uživatelských procesu je init s PID = 1.\n\n• Procesy jádra, jejichž předkem není init:\n\n1) Naprosto prvním procesem (PID = 0) bývá SWAPPER (na Linuxu pouze idle, nevypisuje se).\n\n2) Mezi další procesy jádra (kód součástí jádra), jejichž předkem není init, muže pařit napr. pagedaemon.\n\n• Pokud procesu skoncí předek, jeho předkem se automaticky stane init, který později převezme jeho návratový kód (proces nemůže definitivně skončit a jako zombie čeká, dokud neodevzdá návratový kód).\n\n====== START SYSTÉMU ======\n\n• Posloupnost akcí při startu systému:\n\n1) BIOS\n\n2) Načtení a spuštení zavaděce (mbr, boot block).\n\n3) Načtení a spuštení jádra.\n\n4) Jádro vytvoří proces swapper, ten vytvoří případné další procesy jádra a proces init, případne se vytvoří přímo proces init.\n\n5) Init nacítá inicializační konfigurace a spouští další démony a procesy.\n\n• V UNIXu System V byl zaveden systém úrovní behu – SYSV init run-levels: 0-6, s/S (0=halt, 1=single user, s/S=alternativní přechod do single user, 6=reboot). Změna úrovně běhu: telinit N.\n\n===== PŘEPNUTÍ KONTEXTU PROCESU =====\n\n• Přepnutí procesoru (CPU) na jiný proces vyžaduje uložení stavu starého procesu, který dosud používal CPU, a nahrání uloženého stavu nového procesu. Tato úloha je označována jako přepnutí kontextu. Kontext procesu je reprezentován jeho PCB.\n\n• Princip: Plánovač odebere procesor procesu P0, uloží jeho stav do PCB0, obnoví stav procesu P1 z jeho PCB1 a přidělí procesor procesu P1. Přepnutí kontextu je spojeno s režií – přepnutí trvá stovky až tisíce instrukcí. Všechny informace a data, která jsou s během procesu spojena, není nutno ukládat a poté obnovovat - je možné režii spojenou s přepnutím kontextu snížit.\n\n----\n\n== VLÁKNA ==\n\n• Definováno svým identifikátorem (thread ID), aktuální pozicí v programu (program counter), množinou registrů a zásobníkem. \n\n• Pokud má proces více vláken, je schopen vykonávat více úloh současně.\n\n• Vícevláknové procesy mají proti jednovláknovému procesu vlastnosti, které jsou klíčové z hlediska jejich použitelnosti, zejména:\n\n1) RESPONSIVENESS - zvyšují rychlost odezvy aplikace vůči uživateli, když je část aplikace blokována nebo provádí náročnou operaci (prohlížeč umožňuje interakci s uživatele a v jiném vlákně nahrává obrázek).\n\n2) RESOURCE SHARING - vlákna sdílejí pamět’, zdroje a kód procesu (více různých vláken aktivit ve stejném adr. prostoru).\n\n3) ECONOMY - díky sdílení zdrojů je vytváření a přepínání kontextu vláken mnohem úspornější.\n\n• Vlákna mohou být v systémech podporována na dvou úrovních:\n\n1) UŽIVATELSKÁ VLÁKNA (user threads) jsou spravována na uživatelské úrovni, bez účasti jádra operačního systému.\n\n2) VLÁKNA JÁDRA (kernel threads) jsou podporována a spravována přímo operačním systémem.\n\n----\n\n== PLÁNOVÁNÍ PROCESŮ ==\n\n• V OS, který umožňuje souběžný běh více procesů. \n\n• Z hlediska multiprogramování je klíčová maximalizace využití procesoru. \n\n• Z pohledu sdílení času (time sharing) je důležitá frekvence přepínání procesoru (CPU) mezi jednotlivé procesy takovým způsobem, aby byl uživatel schopen komunikovat s každou spuštěnou aplikací (tj. procesem). \n\n• Používá se plánovač procesů (process scheduler), který vybírá nejvhodnější proces pro běh v daném okamžiku. \n\n• V počítačových systémech, které mají pouze jeden procesor, může reálně běžet pouze jeden proces – pokud je jich spuštěno více, musí ostatní čekat, až plánovač procesů rozhodne o jejich přidělení procesoru.\n\n----\n\n==== PLÁNOVACÍ FRONTA ====\n\n• Když proces vstupuje do systému, je vložen do fronty úloh (JOB QUEUE), která obsahuje všechny procesy v systému. \n\n• Procesy v hlavní paměti připravené k běhu čekají na přidělení procesoru ve frontě připravených procesů (READY QUEUE). \n\n• Seznam procesů čekajících na příslušné vstupně-výstupní zařízení je nazýváno fronta zařízení (DEVICE QUEUE). Každé zařízení má svou frontu. Prvky fronty jsou PCB jednotlivých procesů. Hlavička fronty obsahuje ukazatel na první a poslední PCB ve frontě.\n\n----\n\n==== PLÁNOVAČ ====\n\n• V okamžiku, kdy se procesor uvolní, musí OS vybrat jeden z procesů, který je umístěn ve frontě připravených procesů. \n\n• Výběr je prováděn krátkodobým plánovačem (short-term scheduler), ten vybírá procesy podle implementovaného algoritmu. \n\n• NEPREEMPTIVNÍ PLÁNOVÁNÍ - pokud je proces jednou přidělen procesoru, tento proces si drží procesor, dokud ho sám neuvolní bud’ svým ukončením nebo přepnutím do stavu čekání. Např. plánovače používané v některých OS Windows.\n\n• PREEMPTIVNÍ PLÁNOVÁNÍ - k přepnutí kontextu dochází na základě vnějšího podnětu (přerušení), typicky od časovače. K přepnutí kontextu tedy může dojít kdykoliv a proces nemá přímou kontrolu nad dobou svého běhu.\n\n• Rozhodnutí o přeplánování procesů může vzniknout:\n\n1) když se proces přepne ze stavu běžící do stavu čekající (např. při vstupněvýstupní operaci) (nepreemptivní).\n\n2) když se proces přepne ze stavu běžící do stavu připravený (např. při přerušení) (preemptivní).\n\n3) když se proces přepne ze stavu čekající do stavu připravený (např. při dokončení vstupně-výstupní operace) (preemptivní).\n\n4) když se proces ukončí (nepreemptivní).\n\n----\n\n==== PLÁNOVACÍ KRITÉRIA ====\n\n• Různé plánovací algoritmy mají různé vlastnosti, které mohou favorizovat jednu třídu procesů nad ostatními. Pro porovnání různých algoritmůlze využít plánovací kritéria, na základě kterých provádějí tyto algoritmy plánování.\n\n1) Využití procesoru (CPU utilization).\n\n2) Propustnost (Throughput).\n\n3) Doba běhu (Turnaround).\n\n4) Doba čekání (Waiting time).\n\n5) Doba odezvy (Response time).\n\n==== PLÁNOVACÍ ALGORITMY ====\n\n====== FIST COME FIRST SERVED (FCFS) ======\n\n• Nejjednodušší plánovací algoritmus, nepreemptivní, má velkou dobu čekání.\n\n• Proces, který požaduje procesor jako první, dostane přidělen procesor jako první. \n\n• Formou fronty FIFO (First In First Out) - vstupující je zařazen na konec fronty, procesor se přiděluje procesu ze začátku fronty.\n\n====== SHORTEST JOB FIRST (SJF) ======\n\n• Rozhoduje o přidělení procesoru podle doby následného obsazení procesoru (CPU burst-time) daným procesem. \n\n• Pokud je hodnota shodná u více procesů, vybere se na základě algoritmu FCFS.\n\n• Jde vlastně o prioritní plánování, kde je priorita určena časem trvání. \n\n====== PRIORITNÍ PLÁNOVÁNÍ (PRIORITY SCHEDULING) ======\n\n• V tomto plánovacím algoritmu je každému procesu přiřazena priorita a procesor je vždy přidělen procesu s nejvyšší prioritou.\n\n• Procesy se stejnou prioritou jsou plánovány podle algoritmu FCFS. \n\n====== ROUND-ROBIN ======\n\n• Fronta připravených procesů je implementovaná jako kruhová fronta. Plánovač postupně prochází frontou a přiděluje procesor jednotlivým procesům nejvýše po dobu jednoho časového kvanta (obecně v rozsahu 10 až 100 milisekund).\n\n• Preemptivní obdoba algoritmu FCFS. \n\n• Po přidělení procesoru se nastaví časovač tak, aby generoval přerušení po uběhnutí jednoho časového kvanta.\n\n• Při běhu procesu mohou nastat tyto dva případy:\n\n1) Doba obsazení procesoru je menší než časové kvantum. Proces se sám vzdává procesoru (např. při vstupně-výstupní operaci).\n\n2) Doba obsazení procesoru je větší než časové kvantum. Po uplynutí časového kvanta generuje časovač přerušení. Dojde k přepnutí kontextu a proces je vložen na konec fronty připravených procesů.\n\n====== VÍCEÚROVŇOVÉ PRIORITNÍ PLÁNOVÁNÍ ======\n\n• Víceúrovňové plánování patří do speciální kategorie plánovacích algoritmů. Je určeno pro situace, kdy potřebujeme rozdělit procesy na různé kategorie, nad kterými je výhodnější používat různé plánovací algoritmy, optimalizované na jiná kritéria.\n\n• V systémech typu Unix/Linux.\n\n====== DYNAMICKÁ ZMĚNA PRIORIT ======\n\n• Pokud proces spotřeboval v určitém časovém úseku hodně procesorového času, jeho priorita se dynamicky snižuje. \n\n• Důsledkem je rychlejší reakce procesů čekajících na vstupní reakce a mají tedy malou spotřebu času procesoru. \n\n• Procesy s velmi malou počáteční prioritou mají šanci, že se jejich priorita časem zvýší a bude pro ně naplánován procesor.\n\n• V systémech typu Unix/Linux. \n\n----\n\n==== PROBLÉMY SPOJENÉ S PRIORITNÍM PLÁNOVÁNÍM ====\n\n====== PROBLÉM VYHLADOVĚNÍ ======\n\n• Proces, který je připraven k běhu, nedostane přidělen procesor, protože ten je neustále přidělován vice prioritním procesům.\n\n• Řešením tohoto může být přidělení určitého časového kvanta skupině procesů se stejnou prioritou. Po vyčerpání kvanta se začnou plánovat procesy s nižší prioritou. \n\n• Jiným řešením může být explicitní kontrola, zda někdo nehladoví.\n\n====== PROBLÉM INVERZE PRIORIT ======\n\n• Nízko prioritní proces má a lokovaný nějaký zdroj a je blokován více prioritními procesy. Nízko prioritní zdroj tedy nemůže dokončit operaci s daným zdrojem a blokuje ho.\n\n====== VÍCEPROCESOROVÉ SYSTÉMY ======\n\n• Nutnost vyvažovat výkon.\n\n====== REAL-TIME SYSTÉMY ======\n\n• Nutnost zajistit garantovanou odezvu některých akcí.\n\n----\n\n== KOMUNIKACE PROCESŮ ==\n\n• Procesy mohou mezi sebou komunikovat prostřednictvím prostředků, které se souhrnně označují jako meziprocesová komunikace (Inter-Process Communication – IPC). Mezi tyto prostředky patří zejména:\n\n1) signály (systémová volání kill, signal, ...)\n\n2) roury (systémová volání pipe, ...)\n\n3) zprávy (systémová volání msgsnd, msgrecv, ...)\n\n4) sdílená pamět’ (systémová volání shmget, shmat, ...)\n\n5) sockety (systémová volání socket, ...)\n\n6) RPC – Remote Procedure Call\n\n==== SIGNÁLY ====\n\n• Číslo (int) zaslané procesu prostrednictvím pro to zvlášte definovaného rozhraní.\n\n• Signály jsou generovány: při chybách (aritmetická chyba, chyba práce s pamětí...), při externích událostech (vypršení časovace, dostupnost I/O, ...), na žádost procesu – IPC (kil, ...).\n\n• Signály často vznikají asynchronně k činnosti programu.\n\n• Mezi implicitní reakce na signál patří: ukončení procesu (případně s generováním core dump), ignorování a pozastavení.\n\n• Lze předefinovat obsluhu všech signálu mimo SIGKIL, SIGSTOP a SIGCONT.\n\n----\n\n== SYNCHRONIZACE PROCESŮ ==\n\n==== ČASOVĚ ZÁVISLÉ CHYBY (RACE CONDITION) ====\n\n• Chyby vznikající při přístupu ke sdíleným zdrojům (sdílená data, sdílená I/O zařízení) kvůli různému pořadí provádění jednotlivých výpočtův systému, tj. kvůli jejich různé relativní rychlosti. \n\n• Ve stejnou chvíli se dva procesy snaží změnit stejnou hodnotu.\n\n• Hrozí pak, že operace proběhne jako neatomická (proběhne částečně).\n\n----\n\n==== PROBLÉM KRITICKÉ SEKCE ====\n\n• Kritickou sekcí nazveme úsek kódu, jehož korektní provádění vyžaduje vzájemné vyloučení vůči jiným úsekům kódu - v daném okamžiku může existovat nanejvýš jeden proces, jehož řízení se nachází v rámci některého z těchto úseků kódu. \n\n• Při práci se sdílenými kritickými sekcemi je zapotřebí zajistit:\n\n1) Vzájemné vyloučení (mutual exclusion), kdy nanejvýš jeden proces (případně určitý počet procesů) může být v daném okamžiku v dané skupině sdílených kritických sekcí.\n\n2) Dostupnost kritické sekce – tj. každý proces by měl mít možnost vstoupit do kritické sekce v konečném čase.\n\n• UVÁZNUTÍ (deadlock) je situace, kdy každý ze skupiny procesů čeká na stav, který by mohl nastat pouze tehdy, kdyby někdo z dané skupiny procesů mohl pokračovat.\n\n• BLOKOVÁNÍ (blocking) je situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. \n\n• STÁRNUTÍ (starvation) je situace, kdy proces čeká na podmínku, která vždy může, ale nemusí nastat. Někdy to bývá tolerováno.\n\n[[Soubor:35_02.JPG]]\n[[Soubor:35_03.JPG]]\n\nAlgoritmy pro vstup do kritické sekce:\n\n====== PETERSONŮV ALGORITMUS ======\n\n• Proces i při vstupu do kritické sekce vyjádří svůj zájem o kritickou sekci nastavením příznaku flag[i], ale současně dá přednost svému protivníkovi nastavením turn na 1-i. Následně proces aktivně čeká, až bud’ jeho protivník nemá o kritickou sekci zájem, nebo mu vrátí přednost ke vstupu do kritické sekce.\n\n====== BAKERY ALGORITMUS ======\n\n• Před vstupem do kritické sekce proces získá lístek, jehož číselná hodnota je větší než čísla přidělená již čekajícím procesům.\n\n====== SEMAFORY ======\n\n• Celočíselná sdílená proměnná přístupná dvěmi atomickými (až na možnost pozastavení, je-li semafor obsazen) operacemi:\n\n1) lock (v některé literatuře též označovaná jako P či wait).\n\n2) unlock (také V či signal).\n\n• Semafor může vpouštět procesy do kritické sekce po jednom (tzv. binární semafor, též označovaný jako tzv. mutex) či po více.\n\n• Při obsazování kritické sekce se hodnota semaforu snižuje, při uvolňování naopak zvyšuje. \n\n• Je-li hodnota semaforu kladná, udává počet procesů, který je ještě možné vpustit do kritické sekce. Je-li tato hodnota nulová znamená to, že kritická sekce je obsazená, ale nikdo na kritickou sekci nečeká. Klesne-li semafor do záporných hodnot znamená to, že kritická sekce je obsazená a navíc příslušný počet procesů na semaforu čeká. Tyto procesy typicky nečekají aktivně, ale jsou pozastaveny a odkaz na ně je uložen ve frontě spojené se semaforem.\n\n====== MONITORY ======\n\n• Abstraktní datový typ, který v sobě zapouzdřuje sdílená data, nad kterými je možno v rámci monitoru implementovat určité operace, přičemž je zaručeno, že v daném okamžiku bude vždy rozpracována pouze jedna z těchto operací. \n\n• Uživatelsky příjemnější.\n\n• Zahrnuje i příslušný inicializační kód pro sdílená data. \n\n• Za běhu na vstupu do monitoru může vzniknout fronta čekajících procesů.\n\n• Pro použití i pro čekání na určitou událost se rozšiřuje o koncept podmínek (conditions). Nad podmínkami deklarovanými v rámci monitoru (například syntaktickou konstrukcí condition c1, c2, ...;) lze užít operace wait (pouze pozastaví) a signal nebo notify (upozorní proces na splnění podmínek).\n\n----\n\n==== KLASICKÉ SYNCHRONIZAČNÍ PROBLÉMY ====\n\n• PRODUCENT A KONZUMENT - jeden generuje data a zasílá je druhému k dalšímu zpracování přes buffer o kapacitě N položek. Když se vyrovnávací pamět’ zaplní, musí čekat producent; je-li buffer prázdný, musí čekat konzument.\n\n• ČTENÁŘI A PÍSAŘI - máme libovolný počet procesů, některé čtou sdílená data, zatímco jiné je modifikují. V daném okamžiku může současně číst libovolný počet čtenářů. Pokud nějaký písař píše, nemůže žádný čtenář číst, ani žádný další písař psát.\n\n• VEČEŘÍCÍ FILOZOFOVÉ - pět filozofů sedí kolem kulatého stolu. Každý má svůj talíř a k jídlu používá čínské hůlky, mezi každými dvěmi filozofy je umístěna jediná hůlka. Aby filozof mohl jíst, musí získat obě hůlky, které se nacházejí po stranách jeho talíře. Pak se může najíst, hůlky vrátit na stůl a přemýšlet, zatímco jí někdo jiný.\n\n[[Soubor:35_04.JPG]]\n\n----\n\n==== UVÁZNUTÍ (DEADLOCK) ====\n\n• Situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. Aby došlo k uváznutí (deadlocku) musí být splněny podmínky:\n\n1) Musí být užito vzájemného vyloučení při přístupu ke sdíleným prostředkům.\n\n2) Ve skupině procesů, které uvázly, jsou procesy, které vlastní alespoň jeden zdroj a čekají na další.\n\n3) Sdílené zdroje jsou uvolňovány až po úplném dokončení jejich použití.\n\n4) Vzniká cyklická závislost na sebe čekajících procesů, proces 1 vlastní zdroje a čeká na zdroj používaný procesem 2, 2 na 3, 3 na 1.\n\nPREVENCE UVÁZNUTÍ\n\n1) U prostředků, které umožňují sdílený přístup, nejsou zámky zapotřebí a nebudeme je tedy zbytečně používat.\n\n2) Proces může žádat o prostředky pouze tehdy, pokud žádné nevlastní.\n\n3) Pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, prostředky jsou mu odebrány a čeká se.\n\n4) Prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším (nebo v jiném pevně daném pořadí).\n\n====== VYHÝBÁNÍ SE UVÁZNUTÍ ======\n\n• Princip je založen na tom, že každý proces před spuštěním deklaruje určité informace o způsobu, jakým bude využívat sdílené zdroje. Ná plánování rozdělení zdrojů se pak používá Bankéřův algoritmus.\n\n====== DETEKCE UVÁZNUTÍ A ZOTAVENÍ ======\n\n• Periodicky (nebo při každé žádosti o zdroje) se kontroluje, zda nedošlo k uváznutí. Pokud ano, pak systém uváznutí odstraní např. tak, že některému procesu odebere některé zdroje a proces pozastaví.\n\n----\n\n==== FORMÁLNÍ VERIFIKACE ====\n\n• Je třeba pokud se nepoužije žádný z mechanizmů prevence, detekce a zotavení. Dokazuje správnost systému.\n\n• Proces formální verifikace:\n\n1) Vytvoření modelu.\n\n2) Specifikace vlastnosti, kterou chceme ověřit.\n\n3) Kontrola, zda model splňuje specifikaci.\n\n• Zakladní přístupy k formální verifikaci:\n\n1) Theorem proving: Využívá poloautomatický dokazovací prostředek. Vyžaduje experta, který určuje, jak se má důkaz vést.\n\n2) Model checking: Využívá automatický prostředek, generování a prohledávání stavového prostoru. Velikost stavového prostoru roste exponenciálně s velikostí modelu.\n\n3) Static analysis: Snaha o ověření příslusných vlastností na základě popisu modelu či system bez jeho provádění.\n\n----\n\n== TRANSAKCE ==\n\n• Skupina operací, které jsou vykonávané jako celek (většinou nad databází). \n\n==== ACID ====\n\n• Transakční systém podporující vykonávání transakcí a zajišťující jejich specifické vlastnosti.\n\nA – atomicity (provede se pouze celá transakce nebo vůbec).\n\nC – consistency (koresponduje s údaji z reálného světa).\n\nI – isolation/independence (transakce probíhají odděleně pomocí sekvenčního zpracování, paralelního nebo díky plánu). \n\nD – durability (trvanlivost – neztrácí se data).\n\n==== MODELY TRANSAKCÍ ====\n\n• Ploché transakce – transakce střídá výpočet s lokáílními proměnnými a vykonávání SQL příkazů, dokud neskončí.\n\n• Strukturované transakce – umožňuje dekompozici transakce a její lepší abstakci atomicity, integrity a trvanlivosti\n\n• Milníky (savepoints) – místo v transakci fungující jako bod pro částečný návrat (databáze se vrátí do stavu, v jakém byla).','utf-8'),(1267,'== PROCES ==\n\n• Je chápán jako program v běhu, jeho instance, která je nahrána do paměti počítačového systému a spuštěna. \n\n• V jednom okamžiku tak mohou být spuštěny instance (procesy) různých, ale i stejných programů.\n\n• Hlavním úkolem operačního systému je zajištění běhu uživatelských procesů. Jelikož procesů může běžet současně více a systémové zdroje jsou omezené, musí procesy tyto zdroje sdílet. Operační systém musí také zajištovat správu přístupů k těmto sdíleným zdrojům. Jedním z těchto zdrojů je i procesor (CPU – Central Processing Unit). \n\n• SPRÁVA PROCESŮ (process management) zahrnuje plánovač (scheduler), který přiděluje procesor (CPU) procesům, správu paměti (memory management) a podporu meziprocesové komunikace (IPC).\n\n==== STAVY ====\n\n1) NOVÝ (New) je právě vytvořený.\n\n2) BĚŽÍCÍ (Running) je přiřazen procesoru a běží, provádějí se jeho instrukce.\n\n3) ČEKAJÍCÍ (Waiting) čeká na výskyt nějaké události, \nnapř. dokončení vstupně výstupní operace.\n\n4) PŘIPRAVENÝ (Ready) čeká na své přiřazení procesoru.\n\n5) UKONČENÝ (Terminated) ukončil svůj běh.\n\n• V systému UNIX se ještě setkáme s následujícími stavy:\n\n6) VYTVOŘENÝ (init) je ještě neinicializovaný.\n\n7) PŘIPRAVENÝ (runnable) by mohl běžet, ale nemá přístup do CPU.\n\n8) BĚŽÍCÍ (running) používá CPU.\n\n9) MÁTOHA (zombified) je po exit, rodič ještě nepřevzal exit-code\n\n10) ČEKAJÍCÍ (sleeping) čeká na událost.\n\n11) ODLOŽENÝ (suspended) ”zmrazený“ signálem SIGSTOP.\n\n• Každý proces končí s návratovou hodnotou, která identifikuje způsob jeho ukončení.\n\n[[Soubor:35_01.JPG]]\n\n----\n\n==== SOUČÁSTI ====\n\n• Instance kódu, sekvence instrukcí, které se postupně provádějí. \n\n• Informace o aktuální pozici (program counter).\n\n• Obsah registrů procesoru, zásobník obsahující dočasná data (parametry metod, lokální proměnné apod.) a další údaje v závislosti na hostitelském prostředí.\n\n• Obecně je proces v operačním systému definován následujícími vlastnostmi (uloženy ve struktuře process control block (PCB)).\n\n====== PCB ======\n\n• PCB (Process Control Block) nebo task control block, task struct…\n\n• Struktura pro uložení informací o procesu. Může být také rozdělen do několika dílčích struktur.\n\n• PCB zahrnuje:\n\n1) identifikátor (PID)\n\n2) stav jeho plánování\n\n3) program, kterým je řízen\n\n4) obsah registrů (včetně EIP a ESP apod.)\n\n5) data a zásobník\n\n6) využití dalších zdrojů OS a vazba na další objekty OS (otevřené soubory, signály atd.)\n\n7) plánovací informace (priorita, ukazatele na plánovací fronty, ...)\n\n8) informace spojené se správou paměti (tabulky stránek, ...),\n\n9) informace spojené s účtováním (spotreba procesoru, ...),\n\n10) využití I/O zdrojů (otevrené soubory, používaná zarízení., ...).\n\n----\n\n==== PROCES V UNIXU ====\n\n====== IDENTIFIKÁTORY ======\n\n• identifikace procesu PID\n\n• identifikace předka procesu PPID\n\n• reálný (skutečný) uživatel UID, skupina uživatelů GID\n\n• efektivní uživatel EUID, skupina uživatelů EGID\n\n• uložená EUID, uložená EGID (v Linuxu navíc FSUID a FSGID)\n\n• skupina procesů PGID a sezení SID, do kterých proces patří\n\n====== ČÁSTI PROCESU V PAMĚTI ======\n\n\'\'\'UŽIVATELSKÝ ADRESOVÝ PROSTOR (USER ADDRESS SPACE)\'\'\' \n\n• Je prostor obsahující:\n\n1) kód (code area/text segment)\n\n2) data (inicializovaná/neinicializovaná data, heap)\n\n3) zásobník\n\n4) soukromá data sdílených knihoven, sdílené knihovny, sdílená pamet’\n\n\'\'\'UŽIVATELSKÁ OBLAST (USER AREA)\'\'\'\n\n• Uložena zvlášť pro každý proces spolu s daty, kódem a zásobníkem v user address space procesu.\n\n• Je přístupná pouze jádru.\n\n• Obsahuje část PCB, která je používána zejména za běhu procesu:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) obsah registru\n\n3) deskriptory souboru\n\n4) obslužné funkce signálu\n\n5) účtování (spotřebovaný čas CPU...)\n\n6) pracovní a kořenový adresář\n\n\'\'\'ZÁZNAM V TABULCE PROCESU (PROCESS TABLE)\'\'\'\n\n• Uložen trvale v jádru.\n\n• Obsahuje zejména informace o procesu, které jsou důležité, i když proces neběží:\n\n1) PID, PPID, UID, EID, GID, EGID\n\n2) stav plánování\n\n3) událost, na kterou se čeká\n\n4) plánovací informace (priorita, spotřeba času...)\n\n5) čekající signály\n\n6) odkaz na tabulku paměťových regionů procesu\n\n\'\'\'TABULKA PAMĚTOVÝCH REGIONŮ PROCESU (PER-PROCESS REGION TABLE)\'\'\' \n\n• Popis paměťových regionů procesu (spojitá oblast virtuální paměti použitá pro data, kód, zásobník, sdílenou pamet’) + príslušné položky tabulky regionu, tabulka stránek.\n\n\'\'\'ZÁSOBNÍK JÁDRA\'\'\'\n\n====== KONTEXT PROCESU ======\n\n• Někdy se též používá pojem kontext procesu = stav procesu.\n\n1) uživatelský kontext (user-level context): kód, data, zásobník, sdílená data\n\n2) registrový kontext\n\n3) systémový kontext (system-level context): uživatelská oblast, položka tabulky procesu, tabulka pamětových regionů procesu...\n\n====== SYSTÉMOVÁ VOLÁNÍ NAD PROCESY ======\n\n• fork, exe, exit, wait, kil, signal, getpid, getpid\n\n====== VYTVÁŘENÍ PROCESU ======\n\n• Vytváření procesu – služba fork: duplikuje proces, vytvoří potomka (vztah rodič–potomek (parent–child), hierarchie procesu).\n\n====== HIERARCHIE PROCESU ======\n\n• Předkem všech uživatelských procesu je init s PID = 1.\n\n• Procesy jádra, jejichž předkem není init:\n\n1) Naprosto prvním procesem (PID = 0) bývá SWAPPER (na Linuxu pouze idle, nevypisuje se).\n\n2) Mezi další procesy jádra (kód součástí jádra), jejichž předkem není init, muže pařit napr. pagedaemon.\n\n• Pokud procesu skoncí předek, jeho předkem se automaticky stane init, který později převezme jeho návratový kód (proces nemůže definitivně skončit a jako zombie čeká, dokud neodevzdá návratový kód).\n\n====== START SYSTÉMU ======\n\n• Posloupnost akcí při startu systému:\n\n1) BIOS\n\n2) Načtení a spuštení zavaděce (mbr, boot block).\n\n3) Načtení a spuštení jádra.\n\n4) Jádro vytvoří proces swapper, ten vytvoří případné další procesy jádra a proces init, případne se vytvoří přímo proces init.\n\n5) Init nacítá inicializační konfigurace a spouští další démony a procesy.\n\n• V UNIXu System V byl zaveden systém úrovní behu – SYSV init run-levels: 0-6, s/S (0=halt, 1=single user, s/S=alternativní přechod do single user, 6=reboot). Změna úrovně běhu: telinit N.\n\n===== PŘEPNUTÍ KONTEXTU PROCESU =====\n\n• Přepnutí procesoru (CPU) na jiný proces vyžaduje uložení stavu starého procesu, který dosud používal CPU, a nahrání uloženého stavu nového procesu. Tato úloha je označována jako přepnutí kontextu. Kontext procesu je reprezentován jeho PCB.\n\n• Princip: Plánovač odebere procesor procesu P0, uloží jeho stav do PCB0, obnoví stav procesu P1 z jeho PCB1 a přidělí procesor procesu P1. Přepnutí kontextu je spojeno s režií – přepnutí trvá stovky až tisíce instrukcí. Všechny informace a data, která jsou s během procesu spojena, není nutno ukládat a poté obnovovat - je možné režii spojenou s přepnutím kontextu snížit.\n\n----\n\n== VLÁKNA ==\n\n• Definováno svým identifikátorem (thread ID), aktuální pozicí v programu (program counter), množinou registrů a zásobníkem. \n\n• Pokud má proces více vláken, je schopen vykonávat více úloh současně.\n\n• Vícevláknové procesy mají proti jednovláknovému procesu vlastnosti, které jsou klíčové z hlediska jejich použitelnosti, zejména:\n\n1) RESPONSIVENESS - zvyšují rychlost odezvy aplikace vůči uživateli, když je část aplikace blokována nebo provádí náročnou operaci (prohlížeč umožňuje interakci s uživatele a v jiném vlákně nahrává obrázek).\n\n2) RESOURCE SHARING - vlákna sdílejí pamět’, zdroje a kód procesu (více různých vláken aktivit ve stejném adr. prostoru).\n\n3) ECONOMY - díky sdílení zdrojů je vytváření a přepínání kontextu vláken mnohem úspornější.\n\n• Vlákna mohou být v systémech podporována na dvou úrovních:\n\n1) UŽIVATELSKÁ VLÁKNA (user threads) jsou spravována na uživatelské úrovni, bez účasti jádra operačního systému.\n\n2) VLÁKNA JÁDRA (kernel threads) jsou podporována a spravována přímo operačním systémem.\n\n----\n\n== PLÁNOVÁNÍ PROCESŮ ==\n\n• V OS, který umožňuje souběžný běh více procesů. \n\n• Z hlediska multiprogramování je klíčová maximalizace využití procesoru. \n\n• Z pohledu sdílení času (time sharing) je důležitá frekvence přepínání procesoru (CPU) mezi jednotlivé procesy takovým způsobem, aby byl uživatel schopen komunikovat s každou spuštěnou aplikací (tj. procesem). \n\n• Používá se plánovač procesů (process scheduler), který vybírá nejvhodnější proces pro běh v daném okamžiku. \n\n• V počítačových systémech, které mají pouze jeden procesor, může reálně běžet pouze jeden proces – pokud je jich spuštěno více, musí ostatní čekat, až plánovač procesů rozhodne o jejich přidělení procesoru.\n\n----\n\n==== PLÁNOVACÍ FRONTA ====\n\n• Když proces vstupuje do systému, je vložen do fronty úloh (JOB QUEUE), která obsahuje všechny procesy v systému. \n\n• Procesy v hlavní paměti připravené k běhu čekají na přidělení procesoru ve frontě připravených procesů (READY QUEUE). \n\n• Seznam procesů čekajících na příslušné vstupně-výstupní zařízení je nazýváno fronta zařízení (DEVICE QUEUE). Každé zařízení má svou frontu. Prvky fronty jsou PCB jednotlivých procesů. Hlavička fronty obsahuje ukazatel na první a poslední PCB ve frontě.\n\n----\n\n==== PLÁNOVAČ ====\n\n• V okamžiku, kdy se procesor uvolní, musí OS vybrat jeden z procesů, který je umístěn ve frontě připravených procesů. \n\n• Výběr je prováděn krátkodobým plánovačem (short-term scheduler), ten vybírá procesy podle implementovaného algoritmu. \n\n• NEPREEMPTIVNÍ PLÁNOVÁNÍ - pokud je proces jednou přidělen procesoru, tento proces si drží procesor, dokud ho sám neuvolní bud’ svým ukončením nebo přepnutím do stavu čekání. Např. plánovače používané v některých OS Windows.\n\n• PREEMPTIVNÍ PLÁNOVÁNÍ - k přepnutí kontextu dochází na základě vnějšího podnětu (přerušení), typicky od časovače. K přepnutí kontextu tedy může dojít kdykoliv a proces nemá přímou kontrolu nad dobou svého běhu.\n\n• Rozhodnutí o přeplánování procesů může vzniknout:\n\n1) když se proces přepne ze stavu běžící do stavu čekající (např. při vstupněvýstupní operaci) (nepreemptivní).\n\n2) když se proces přepne ze stavu běžící do stavu připravený (např. při přerušení) (preemptivní).\n\n3) když se proces přepne ze stavu čekající do stavu připravený (např. při dokončení vstupně-výstupní operace) (preemptivní).\n\n4) když se proces ukončí (nepreemptivní).\n\n----\n\n==== PLÁNOVACÍ KRITÉRIA ====\n\n• Různé plánovací algoritmy mají různé vlastnosti, které mohou favorizovat jednu třídu procesů nad ostatními. Pro porovnání různých algoritmůlze využít plánovací kritéria, na základě kterých provádějí tyto algoritmy plánování.\n\n1) Využití procesoru (CPU utilization).\n\n2) Propustnost (Throughput).\n\n3) Doba běhu (Turnaround).\n\n4) Doba čekání (Waiting time).\n\n5) Doba odezvy (Response time).\n\n==== PLÁNOVACÍ ALGORITMY ====\n\n====== FIST COME FIRST SERVED (FCFS) ======\n\n• Nejjednodušší plánovací algoritmus, nepreemptivní, má velkou dobu čekání.\n\n• Proces, který požaduje procesor jako první, dostane přidělen procesor jako první. \n\n• Formou fronty FIFO (First In First Out) - vstupující je zařazen na konec fronty, procesor se přiděluje procesu ze začátku fronty.\n\n====== SHORTEST JOB FIRST (SJF) ======\n\n• Rozhoduje o přidělení procesoru podle doby následného obsazení procesoru (CPU burst-time) daným procesem. \n\n• Pokud je hodnota shodná u více procesů, vybere se na základě algoritmu FCFS.\n\n• Jde vlastně o prioritní plánování, kde je priorita určena časem trvání. \n\n====== PRIORITNÍ PLÁNOVÁNÍ (PRIORITY SCHEDULING) ======\n\n• V tomto plánovacím algoritmu je každému procesu přiřazena priorita a procesor je vždy přidělen procesu s nejvyšší prioritou.\n\n• Procesy se stejnou prioritou jsou plánovány podle algoritmu FCFS. \n\n====== ROUND-ROBIN ======\n\n• Fronta připravených procesů je implementovaná jako kruhová fronta. Plánovač postupně prochází frontou a přiděluje procesor jednotlivým procesům nejvýše po dobu jednoho časového kvanta (obecně v rozsahu 10 až 100 milisekund).\n\n• Preemptivní obdoba algoritmu FCFS. \n\n• Po přidělení procesoru se nastaví časovač tak, aby generoval přerušení po uběhnutí jednoho časového kvanta.\n\n• Při běhu procesu mohou nastat tyto dva případy:\n\n1) Doba obsazení procesoru je menší než časové kvantum. Proces se sám vzdává procesoru (např. při vstupně-výstupní operaci).\n\n2) Doba obsazení procesoru je větší než časové kvantum. Po uplynutí časového kvanta generuje časovač přerušení. Dojde k přepnutí kontextu a proces je vložen na konec fronty připravených procesů.\n\n====== VÍCEÚROVŇOVÉ PRIORITNÍ PLÁNOVÁNÍ ======\n\n• Víceúrovňové plánování patří do speciální kategorie plánovacích algoritmů. Je určeno pro situace, kdy potřebujeme rozdělit procesy na různé kategorie, nad kterými je výhodnější používat různé plánovací algoritmy, optimalizované na jiná kritéria.\n\n• V systémech typu Unix/Linux.\n\n====== DYNAMICKÁ ZMĚNA PRIORIT ======\n\n• Pokud proces spotřeboval v určitém časovém úseku hodně procesorového času, jeho priorita se dynamicky snižuje. \n\n• Důsledkem je rychlejší reakce procesů čekajících na vstupní reakce a mají tedy malou spotřebu času procesoru. \n\n• Procesy s velmi malou počáteční prioritou mají šanci, že se jejich priorita časem zvýší a bude pro ně naplánován procesor.\n\n• V systémech typu Unix/Linux. \n\n----\n\n==== PROBLÉMY SPOJENÉ S PRIORITNÍM PLÁNOVÁNÍM ====\n\n====== PROBLÉM VYHLADOVĚNÍ ======\n\n• Proces, který je připraven k běhu, nedostane přidělen procesor, protože ten je neustále přidělován vice prioritním procesům.\n\n• Řešením tohoto může být přidělení určitého časového kvanta skupině procesů se stejnou prioritou. Po vyčerpání kvanta se začnou plánovat procesy s nižší prioritou. \n\n• Jiným řešením může být explicitní kontrola, zda někdo nehladoví.\n\n====== PROBLÉM INVERZE PRIORIT ======\n\n• Nízko prioritní proces má a lokovaný nějaký zdroj a je blokován více prioritními procesy. Nízko prioritní zdroj tedy nemůže dokončit operaci s daným zdrojem a blokuje ho.\n\n====== VÍCEPROCESOROVÉ SYSTÉMY ======\n\n• Nutnost vyvažovat výkon.\n\n====== REAL-TIME SYSTÉMY ======\n\n• Nutnost zajistit garantovanou odezvu některých akcí.\n\n----\n\n== KOMUNIKACE PROCESŮ ==\n\n• Procesy mohou mezi sebou komunikovat prostřednictvím prostředků, které se souhrnně označují jako meziprocesová komunikace (Inter-Process Communication – IPC). Mezi tyto prostředky patří zejména:\n\n1) signály (systémová volání kill, signal, ...)\n\n2) roury (systémová volání pipe, ...)\n\n3) zprávy (systémová volání msgsnd, msgrecv, ...)\n\n4) sdílená pamět’ (systémová volání shmget, shmat, ...)\n\n5) sockety (systémová volání socket, ...)\n\n6) RPC – Remote Procedure Call\n\n==== SIGNÁLY ====\n\n• Číslo (int) zaslané procesu prostrednictvím pro to zvlášte definovaného rozhraní.\n\n• Signály jsou generovány: při chybách (aritmetická chyba, chyba práce s pamětí...), při externích událostech (vypršení časovace, dostupnost I/O, ...), na žádost procesu – IPC (kil, ...).\n\n• Signály často vznikají asynchronně k činnosti programu.\n\n• Mezi implicitní reakce na signál patří: ukončení procesu (případně s generováním core dump), ignorování a pozastavení.\n\n• Lze předefinovat obsluhu všech signálu mimo SIGKIL, SIGSTOP a SIGCONT.\n\n----\n\n== SYNCHRONIZACE PROCESŮ ==\n\n==== ČASOVĚ ZÁVISLÉ CHYBY (RACE CONDITION) ====\n\n• Chyby vznikající při přístupu ke sdíleným zdrojům (sdílená data, sdílená I/O zařízení) kvůli různému pořadí provádění jednotlivých výpočtův systému, tj. kvůli jejich různé relativní rychlosti. \n\n• Ve stejnou chvíli se dva procesy snaží změnit stejnou hodnotu.\n\n• Hrozí pak, že operace proběhne jako neatomická (proběhne částečně).\n\n----\n\n==== PROBLÉM KRITICKÉ SEKCE ====\n\n• Kritickou sekcí nazveme úsek kódu, jehož korektní provádění vyžaduje vzájemné vyloučení vůči jiným úsekům kódu - v daném okamžiku může existovat nanejvýš jeden proces, jehož řízení se nachází v rámci některého z těchto úseků kódu. \n\n• Při práci se sdílenými kritickými sekcemi je zapotřebí zajistit:\n\n1) Vzájemné vyloučení (mutual exclusion), kdy nanejvýš jeden proces (případně určitý počet procesů) může být v daném okamžiku v dané skupině sdílených kritických sekcí.\n\n2) Dostupnost kritické sekce – tj. každý proces by měl mít možnost vstoupit do kritické sekce v konečném čase.\n\n• UVÁZNUTÍ (deadlock) je situace, kdy každý ze skupiny procesů čeká na stav, který by mohl nastat pouze tehdy, kdyby někdo z dané skupiny procesů mohl pokračovat.\n\n• BLOKOVÁNÍ (blocking) je situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. \n\n• STÁRNUTÍ (starvation) je situace, kdy proces čeká na podmínku, která vždy může, ale nemusí nastat. Někdy to bývá tolerováno.\n\n[[Soubor:35_02.JPG]]\n\n[[Soubor:35_03.JPG]]\n\nAlgoritmy pro vstup do kritické sekce:\n\n====== PETERSONŮV ALGORITMUS ======\n\n• Proces i při vstupu do kritické sekce vyjádří svůj zájem o kritickou sekci nastavením příznaku flag[i], ale současně dá přednost svému protivníkovi nastavením turn na 1-i. Následně proces aktivně čeká, až bud’ jeho protivník nemá o kritickou sekci zájem, nebo mu vrátí přednost ke vstupu do kritické sekce.\n\n====== BAKERY ALGORITMUS ======\n\n• Před vstupem do kritické sekce proces získá lístek, jehož číselná hodnota je větší než čísla přidělená již čekajícím procesům.\n\n====== SEMAFORY ======\n\n• Celočíselná sdílená proměnná přístupná dvěmi atomickými (až na možnost pozastavení, je-li semafor obsazen) operacemi:\n\n1) lock (v některé literatuře též označovaná jako P či wait).\n\n2) unlock (také V či signal).\n\n• Semafor může vpouštět procesy do kritické sekce po jednom (tzv. binární semafor, též označovaný jako tzv. mutex) či po více.\n\n• Při obsazování kritické sekce se hodnota semaforu snižuje, při uvolňování naopak zvyšuje. \n\n• Je-li hodnota semaforu kladná, udává počet procesů, který je ještě možné vpustit do kritické sekce. Je-li tato hodnota nulová znamená to, že kritická sekce je obsazená, ale nikdo na kritickou sekci nečeká. Klesne-li semafor do záporných hodnot znamená to, že kritická sekce je obsazená a navíc příslušný počet procesů na semaforu čeká. Tyto procesy typicky nečekají aktivně, ale jsou pozastaveny a odkaz na ně je uložen ve frontě spojené se semaforem.\n\n====== MONITORY ======\n\n• Abstraktní datový typ, který v sobě zapouzdřuje sdílená data, nad kterými je možno v rámci monitoru implementovat určité operace, přičemž je zaručeno, že v daném okamžiku bude vždy rozpracována pouze jedna z těchto operací. \n\n• Uživatelsky příjemnější.\n\n• Zahrnuje i příslušný inicializační kód pro sdílená data. \n\n• Za běhu na vstupu do monitoru může vzniknout fronta čekajících procesů.\n\n• Pro použití i pro čekání na určitou událost se rozšiřuje o koncept podmínek (conditions). Nad podmínkami deklarovanými v rámci monitoru (například syntaktickou konstrukcí condition c1, c2, ...;) lze užít operace wait (pouze pozastaví) a signal nebo notify (upozorní proces na splnění podmínek).\n\n----\n\n==== KLASICKÉ SYNCHRONIZAČNÍ PROBLÉMY ====\n\n• PRODUCENT A KONZUMENT - jeden generuje data a zasílá je druhému k dalšímu zpracování přes buffer o kapacitě N položek. Když se vyrovnávací pamět’ zaplní, musí čekat producent; je-li buffer prázdný, musí čekat konzument.\n\n• ČTENÁŘI A PÍSAŘI - máme libovolný počet procesů, některé čtou sdílená data, zatímco jiné je modifikují. V daném okamžiku může současně číst libovolný počet čtenářů. Pokud nějaký písař píše, nemůže žádný čtenář číst, ani žádný další písař psát.\n\n• VEČEŘÍCÍ FILOZOFOVÉ - pět filozofů sedí kolem kulatého stolu. Každý má svůj talíř a k jídlu používá čínské hůlky, mezi každými dvěmi filozofy je umístěna jediná hůlka. Aby filozof mohl jíst, musí získat obě hůlky, které se nacházejí po stranách jeho talíře. Pak se může najíst, hůlky vrátit na stůl a přemýšlet, zatímco jí někdo jiný.\n\n[[Soubor:35_04.JPG]]\n\n----\n\n==== UVÁZNUTÍ (DEADLOCK) ====\n\n• Situace, kdy proces, jenž žádá o vstup do kritické sekce, musí čekat, přestože je kritická sekce volná a ani o žádnou z dané množiny sdílených kritických sekcí žádný další proces nežádá. Aby došlo k uváznutí (deadlocku) musí být splněny podmínky:\n\n1) Musí být užito vzájemného vyloučení při přístupu ke sdíleným prostředkům.\n\n2) Ve skupině procesů, které uvázly, jsou procesy, které vlastní alespoň jeden zdroj a čekají na další.\n\n3) Sdílené zdroje jsou uvolňovány až po úplném dokončení jejich použití.\n\n4) Vzniká cyklická závislost na sebe čekajících procesů, proces 1 vlastní zdroje a čeká na zdroj používaný procesem 2, 2 na 3, 3 na 1.\n\nPREVENCE UVÁZNUTÍ\n\n1) U prostředků, které umožňují sdílený přístup, nejsou zámky zapotřebí a nebudeme je tedy zbytečně používat.\n\n2) Proces může žádat o prostředky pouze tehdy, pokud žádné nevlastní.\n\n3) Pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, prostředky jsou mu odebrány a čeká se.\n\n4) Prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším (nebo v jiném pevně daném pořadí).\n\n====== VYHÝBÁNÍ SE UVÁZNUTÍ ======\n\n• Princip je založen na tom, že každý proces před spuštěním deklaruje určité informace o způsobu, jakým bude využívat sdílené zdroje. Ná plánování rozdělení zdrojů se pak používá Bankéřův algoritmus.\n\n====== DETEKCE UVÁZNUTÍ A ZOTAVENÍ ======\n\n• Periodicky (nebo při každé žádosti o zdroje) se kontroluje, zda nedošlo k uváznutí. Pokud ano, pak systém uváznutí odstraní např. tak, že některému procesu odebere některé zdroje a proces pozastaví.\n\n----\n\n==== FORMÁLNÍ VERIFIKACE ====\n\n• Je třeba pokud se nepoužije žádný z mechanizmů prevence, detekce a zotavení. Dokazuje správnost systému.\n\n• Proces formální verifikace:\n\n1) Vytvoření modelu.\n\n2) Specifikace vlastnosti, kterou chceme ověřit.\n\n3) Kontrola, zda model splňuje specifikaci.\n\n• Zakladní přístupy k formální verifikaci:\n\n1) Theorem proving: Využívá poloautomatický dokazovací prostředek. Vyžaduje experta, který určuje, jak se má důkaz vést.\n\n2) Model checking: Využívá automatický prostředek, generování a prohledávání stavového prostoru. Velikost stavového prostoru roste exponenciálně s velikostí modelu.\n\n3) Static analysis: Snaha o ověření příslusných vlastností na základě popisu modelu či system bez jeho provádění.\n\n----\n\n== TRANSAKCE ==\n\n• Skupina operací, které jsou vykonávané jako celek (většinou nad databází). \n\n==== ACID ====\n\n• Transakční systém podporující vykonávání transakcí a zajišťující jejich specifické vlastnosti.\n\nA – atomicity (provede se pouze celá transakce nebo vůbec).\n\nC – consistency (koresponduje s údaji z reálného světa).\n\nI – isolation/independence (transakce probíhají odděleně pomocí sekvenčního zpracování, paralelního nebo díky plánu). \n\nD – durability (trvanlivost – neztrácí se data).\n\n==== MODELY TRANSAKCÍ ====\n\n• Ploché transakce – transakce střídá výpočet s lokáílními proměnnými a vykonávání SQL příkazů, dokud neskončí.\n\n• Strukturované transakce – umožňuje dekompozici transakce a její lepší abstakci atomicity, integrity a trvanlivosti\n\n• Milníky (savepoints) – místo v transakci fungující jako bod pro částečný návrat (databáze se vrátí do stavu, v jakém byla).','utf-8'),(1268,'','utf-8'),(1269,'','utf-8'),(1270,'','utf-8'),(1271,'','utf-8'),(1272,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 36, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 07\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(1%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06 (07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35 (10, 32, 33, 36, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1273,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce <m>Omikron</m>\n\nOmega - dolní hranice, minimální rychlost růstu funkce <m>Omega</m>\n\nTheta - oznažuje třídu časového chování algoritmu <m> Theta </m>\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(1274,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce <m>O</m>\n\nOmega - dolní hranice, minimální rychlost růstu funkce <m>Omega</m>\n\nTheta - oznažuje třídu časového chování algoritmu <m> Theta </m>\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(1275,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 27\n\nNeprepsano:\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNaceno:\n\nRozuceno:\n\nZoufalstvi:\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1276,'== OOP==\n\n• Objektově orientované programování (OOP) je způsob abstrakce, kdy algoritmus implementujeme pomocí množiny zapouzdřenych vzajemně komunikujicich entit, z nichž každá má plnou vypočetní mocnost celého počítače.\n\n• Objekty jsou intuitivní a vytváří analogii s realitou.\n\n• OOP zahrnuje analýzu, návrh a implementaci aspektů, kde jsou reálné objekty nahrazeny softwarovými (virtuálními).\n\n• OO systém (program, aplikace) se skládá z jednoho či více objektů, které spolu komunikují a interagují při spolupráci na řešení daného problému.\n\n• Například jazyk C++, Smalltalk, Java, Delphi, OCAML, Oberon ...\n\n\'\'\'Výhody:\'\'\'\n\n1) Analogie mezi softwarovým modelem a reálným modelem.\n\n2) Flexibilita softwarových modelů.\n\n3) Znovupoužitelnost SW modelů.\n\n4) Vyšší míra abstrakce.\n\n5) Přirozenější práce, jednodušší dekompozice problémů, srozumitelnost.\n\n6) Udržovatelnost.\n\n7) Dobrá použitelnost pro velké projekty vyžadující hodně spolupráce.\n\n\'\'\'Nevýhody:\'\'\'\n\n1) V některých oblastech neexistuje analogie s reálnými objekty.\n\n2) Složitější sémantika vyžaduje víc učení.\n\n3) Nemožnost porušovat zapouzdření (někdy obcházeno pomocí modifikátorů viditelnosti).\n\n4) Výsledný kód je pomalejší kvůli využívání dodatečných kontrol a odlišných metod než jsou vlastní von Neumanově architektuře.\n\n5) Problém s režií uložení objektů.\n\n----\n\n==== OBJEKT ====\n\n• Entita zapouzdřující stavové informace a poskytující sadu operací nad tímto objektem nebo jeho částmi.\n\n• Jednoznačně identifikovatelný reálný objekt (se sémantikou z obecné češtiny).\n\n• Abstrakce (v případě, že reálný objekt popisujeme abstraktním modelem) zahrnující data a jejich chování (operace nad daty). \n\n• Instance třidy obsahujici data a operace.\n\n• Entita, která rozumí zaslání některých zpráv a ve své vnitřní struktuře umožňuje zapouzdřit další objekty.\n\n• Základní jednotka modularity i struktury v OOP.\n\n• IDENTITA porovnává, zda jsou objekty totožné, zda se jedná o tentýž objekt.\n\n• SHODNOST porovnává objekty podle jejich obsahu. Shodné mohou být i neidentické objekty.\n\n====== PERZISTENTNÍ OBJEKT ======\n\n• Opakem jsou dynamické objekty, jsou vícetypové, mají více třídních typů (člověk, student, muž).\n\n• Přežívá dobu běhu aplikace a při jejím dalším spuštění je opět nezměněn a přítomen\n\n• Implementace 1: uloží se stav objektů (hodnoty atributů) někam do knihovny, metody se distribuují zvlášť.\n\n• Implementace 2: uloží se stav objektů a třída (metody), náročné, závislé na platformě, často mezikód.\n\n----\n\n==== ZPRÁVA ====\n\n• Komunikační jednotka mezi dvěma libovolnými objekty. \n\n• Kromě jména může obsahovat i dodatečné informace v podobě PARAMETRŮ (ARGUMENTŮ), které slouží pro podrobnější specifikaci zprávy a tedy i upřesnění informace předávané mezi těmito objekty. \n\n• Zaslaná zpráva ma jak svého ODESÍLATELE, tak PŘÍJEMCE (objekt, kterému je zpráva zaslána). \n\n• Sémantika: příjemce (adresát) na obdrženou zprávu od odesílatele reaguje vyhledáním patřičné implementace reakce na tuto zprávu, což bývá nejčastěji odpovídající zapouzdřená funkce - METODA. \n\n• Metody implementují veškeré chování objektů, nebo chcete-li reakce na obdržené zprávy, a mívají spolu se zprávami také shodné jméno i seznam parametrů. Množina všech zpráv, kterým objekt rozumí, tj. je schopen nalézt implementaci odpovídající metody, se nazývá PROTOKOL objektu. Někdy se též lze setkat s pojmen ROZHRANÍ objektu.\n\n• Při obdržení zprávy příjemcem mohou nastat tři různé situace:\n\n1) Objekt ve své implementaci při reagování na zprávu nalezne a zavolá příslušnou metodu.\n\n2) Objekt sice hledanou metodu neobsahuje, ale má ji některý z předků.\n\n3) Objekt implementaci odpovídající metody neobsahuje a ani nebyla nalezena v objektech předků. Nastává výjimka (chyba), že přijaté zprávě nebylo porozuměno, neboli že k ní neexistuje odpovídající metoda.\n\n• Po vykonání metody, jež reagovala na zprávu, se řízení běhu objektového programu zpravidla vrací spolu s návratovou hodnotou (pokud nějaká je) do objektu odesilatele, kde se pokračuje ve výpočtu (v metodě, která zprávu odeslala). \n\n==== ZÁKLADNÍ KONCEPT ====\n\n• Objektově orientované programování slučuje nové programovací koncepty a vylepšuje staré, aby tak dosáhlo přiblížení popisu reálného světa k lidskému způsobu uvažování.\n\n• Na toto dámy xsmies00 a xproch69 vymyslely opět pomůcku: Když příjde chlap do baru, vidí všechny ženy jako objekty. Pokud jsou ošklivé, bude do sebe muset hodit pár panáků a použít abstrakci. Při oslovení musí dát pozor na polymorfismus, protože na stejnou balící hlášku může reagovat každá žena jinak. Zadaří-li se, je třeba použít zapouzdření (prezervativ), aby nedošlo k průšvihu (dědičnost).\n\n• OBJEKTY spojují data a funkcionalitu společně do jednotek zvaných objekty, ze kterých se potom skládá výsledný objektově orientovaný program (na rozdíl od strukturovaného složeného z procedur a funkcí).\n\n• ABSTRAKCE je schopnost programu ignorovat/zjednodušit/zanedbat některé aspekty informací či vlastnosti objektů, se kterými program pracuje. Je to pohled na vybraný problém realného světa a jeho počítačové řešení. Detaily se skrývají do černé skřiňky (black box), která je pro okolí definována pouze svým rozhraním, přes které komunikuje s okolim, a nikoli vnitřnimi detail implementace. Mira abstrakce určuje, jak hodně je vzdálená funkčnost černé skříňky od reality (jak detailní je model). \n\n• POLYMORFISMUS využívá mechanismus zasílání zpráv. Konkrétní použitá metoda reagující na zaslání zprávy závisí na konkrétním objektu, jemuž je zpráva zaslána (člověk – utíkej/pes - utíkej).\n\n• ZAPOUZDŘENÍ uživatel nemůže (už na úrovni sémantiky) měnit interní stav objektů libovolným (tedy i neočekavanym) způsobem, ale musí k tomu využívat poskytované rozhraní (operace nad objektem) definované protokolem objektu. Zapouzdření má význam pro znovupoužitelnost a zásadně to zjednodušuje vývoj nových vlastností objektu.\n\n• DĚDIČNOST je způsob, jak implementovat sdílené chování. Používá se k indikaci, že objekt specializuje nějaké chování (zvíře -> pes) a pro sdílení kódu (potomek dělá to, co rodič, plus něco navíc nebo jinak).\n\nJednoduchá – každý potomek má nejvýše jednoho předka.\n\nVícenásobná – třída dědí od více než jednoho předka.\n\nDědičnost rozhraní – ze snahy o vícenásobnou dědičnost, reší konflikt jmen. Jde o seznam metod, které musí potomek implementovat.\n\nDědičnost implementace (neboli dědičnost) – kromě atributů jsou do dědičnosti zahrnuty celé metody včetně jejich implementace. Zde právě v případě vícenásobné dědičnosti vzniká problém s různými implementacemi stejných metod.\n\n• Model výpočtu: \n\n1) Pojmenování (přiřazení) objektu do proměnné (případně ukazatel nebo reference = nenulový ukazatel).\n\n2) Zaslání zprávy (identifikátor a parametry).\n\n3) Reakce závisí na objektu (nalezne a zavolá metodu, předá zprávu rodiči nebo odpoví, že zprávě neporozuměl).\n\n----\n\n== TŘÍDNĚ ZALOŽENÉ JAZYKY ==\n\n• TŘÍDA – popis, šablona, podle níž mohou být vytvářeny objekty (instance), protokol, směrování zpráv a implementace některých metod, je to zobecnění skupiny objektů.\n\n• INSTANCE TŘÍDY – vytvoření metodou konstruktor, inicializace atributů, vytvoření vazeb (statické i virtuální).\n\nHLUBOKÁ KOPIE objektu – kromě objektu se kopírují i objekty, které referují jeho proměnné.\n\nMĚLKÁ KOPIE objektu – nový objekt má jen odkazy na stejná místa jako starý, kopie atributů a vazeb na metody.\n\n• DĚDIČNOST – má-li funkce f jako parametr objekt třídy A, parametrem může být objekt třídy A nebo třídy odvozené z A.\n\nVÍCENÁSOBNÁ DĚDIČNOST: více než jedna třída použita pro odvození následující (C++) \n\nProblémy: rodiče mají entity stejného názvu a stejného/jiného typu, vybrání postupu při inicializaci, způsob uložení. \n\nŘešení: Metody lze: zakázat, zalepit, přinutit re-implementovat, u různých typů zakázat nebo povolit vedle sebe. Atributy lze: zakázat, zaslepit, sloučit, u různých typů nelze jinak než zakázat.\n\n• PODTYP je taková třída, která je odvozená z jiné třídy (někdy jde o vyžadovanou dědičnost – vyžaduje se vztah odvozené třídy při volání funkcí).\n\nSKUTEČNÝ PODTYP – jde o takovou třídu B, která sice nebyla odvozena od A, ale má s ní shodné metody a atributy.\n\n• REDEFINICE METODY – možnost jazyka definovat pro metodu podtřídy novou, specifičtější implementaci než v nadtřídě (se stejným označením), umožňuje polymorfismus, volání sebe (this, self) nebo rodiče (base, super).\n\n• ŠABLONY – třída definována kolem typu, který je v době psaní kódu neznámý (konkretizace při vytvoření instance).\n\n• POLYMORFISMUS – pozdní vazba na úrovni volání (virtuálních) metod, s jakým typem objektu se bude pracovat.\n\nČASNÁ VAZBA – při překladu již známe typ objektu.\n\nPOZDNÍ VAZBA – určení typu objektu a identifikace metody až za běhu programu, tabulky virtuálních metod (VMT), u dynamicky typovaných jazyků je pouze tato vazba, používá se algoritmus - mechanismus směrování zpráv.\n\n• JMENNÉ PROSTORY – kontejner pro identifikátory (uvnitř každý jiný) k zabránění kolizí jmen .\n\n• MODIFIKÁTORY VIDITELNOSTI pro atributy, metody, vlastnosti nebo dědičnost – soukromý (uvnitř třídy), chráněný (dostupní z metod stejné třídy nebo tříd oddělených) a veřejný (z libovolné metody), někdy v rámci jmenného prostoru.\n\n• PŘETĚŽOVÁNÍ METOD – ve třídě je více metod stejného jména odlišených v typech nebo počtech parametrů.\n\n----\n\n==== RUŠENÍ OBJEKTU ====\n\n• Automatické rušení: \n\nFINALIZACE – úklid a uvolnění zdrojů mimo objekt. \n\nGARBAGE COLLECTOR – ruší objekty nebo shluky, na které neexistuje odkaz.\n\n• Manuální rušení: DESTRUKTOR – likviduje objekty (při dědičnosti je nutné specifikovat pořadí objektů), může být virtuální, hrozí úbytky paměti (memory leaks).\n\n----\n\n==== PŘÍSTUP ====\n\n• ČISTĚ OBJEKTOVÝ - vše je objekt a existuje třída nebo objekt, od které je vše odvozeno.\n\n• HYBRIDNĚ OBJEKTOVÝ - sada základních primitivních typů, které lze skládat do struktur (kořenová třída nebo ne).\n\n----\n\n== PROTOTYPOVĚ ZALOŽENÉ JAZYKY ==\n\n• Mají pouze jeden typ objektu unifikované struktury\n\n• Javascript, Self.\n\n• SLOT – složka objektu obsahující členské proměnné nebo metody. Reakce na zprávu je prohledání všech slotů.\n\n• KLONOVÁNÍ – kopírování objektu mělkou kopií.\n\n• Rušení probíhá automaticky garbage collectorem.\n\n• DELEGACE – na zprávu reaguje objekt, na který byla delegována, příjemce zprávy je objekt, který si odpověď jako první vyžádal, takto se přeposílají zprávy rodičovským objektům (uvedeným v rodičovském slotu).\n\n• RYS – sdílené chování objektů, dynamická dědičnost – rodičovské sloty se mění, objekt mění chování.\n\n• PROTOTYP – modifikace/kopie existující instance, existence kořenového (bázového) objektu, šablona instance.\n\n• práce s daty – části objektů zpřístupňovány jako části datových struktur, private/protected/public. \n\n• definice/deklarace – naklonujeme objekt a změníme nebo definujeme třídu a vytvoříme instanci.\n\n----\n\n== NÁVRH PROGRAMU ==\n\n• analýza → návrh → implementace → údržba, objekt jsou data (ER modely…) a akce (strukturovaná analýza, konečné automaty) \n\n• Problémy: identifikace tříd a objektů, rozdělení rolí/odpovědností mezi ně, kvalita návrhu (testovatelnosti, robustnost, F a NF požadavky, QoS)\n\n• Implementace: problémy při manipulaci se třídami: ukládání metod, dědičnost, přístup atributů v metodách, instanční a třídní proměnné/metody\n\n• Řešení: v čistě objektových virtuálním strojem, jinak statické třídy nejsou uloženy v objektu ani VMT (tabulka virtuálních metod), instance třídy má dostupné svoje metody i metody všech předků.\n\n• VIRTUÁLNÍ STROJ – softwarová vrstva odstiňující HW specifika počítače, umožňující vyšší režii.\n\n----\n\n==== VYKONÁVÁNÍ KÓDU ====\n\n• Přímá interpretace ze syntaktického stromu (Ruby).\n\n• Kompilace do mezikódu (Smalltalk-80), ten je pak přeložen do nativního strojového kódu dané platformy a vykonán (Self, Java).\n\n• OBRAZY OBJEKTOVÉ PAMĚTI – uložený stav objektů, nepoužívá se často, ale zrychluje start aplikací za cenu paměti.\n\n----\n\n==== DATOVÉ TYPY ====\n\n• Přístup 1: Všechno je objekt, existuje prvotní objekt, ze kterého je vše odvozeno.\n\n• Přístup 2: Jsou bázové typy a struktury, třída je druhem struktury (kořenová třída: Java, Delphi, bez: C++).\n\n----\n\n==== NÁVRHOVÉ VZORY ====\n\n• Systém tříd (i abstraktních) pro řešení typických situací.\n\n• Vytvářecí – nepřímou cestou pro nás vytváří objekty (prototyp, jedináček - omezuje možnost třídy vytvářet víc než jednu instanci, veřejná metoda, soukromá proměnná a zákaz volání konstruktoru z ostatních tříd).\n\n• Strukturální – napomáhají při shlukování objektů do celků (dekorátor, adaptér, kontejner, proxy).\n\n• Chování – pomáhají při definici komunikace a toku řízení (observer, návštěvník).\n\n• Další – (stromová struktura = composite, sekvenční průchod = iterator, definice nových metod bez re-definice = visitor).','utf-8'),(1277,'== OOP==\n\n• Objektově orientované programování (OOP) je způsob abstrakce, kdy algoritmus implementujeme pomocí množiny zapouzdřenych vzajemně komunikujicich entit, z nichž každá má plnou vypočetní mocnost celého počítače.\n\n• Objekty jsou intuitivní a vytváří analogii s realitou.\n\n• OOP zahrnuje analýzu, návrh a implementaci aspektů, kde jsou reálné objekty nahrazeny softwarovými (virtuálními).\n\n• OO systém (program, aplikace) se skládá z jednoho či více objektů, které spolu komunikují a interagují při spolupráci na řešení daného problému.\n\n• Například jazyk C++, Smalltalk, Java, Delphi, OCAML, Oberon ...\n\n\'\'\'Výhody:\'\'\'\n\n1) Analogie mezi softwarovým modelem a reálným modelem.\n\n2) Flexibilita softwarových modelů.\n\n3) Znovupoužitelnost SW modelů.\n\n4) Vyšší míra abstrakce.\n\n5) Přirozenější práce, jednodušší dekompozice problémů, srozumitelnost.\n\n6) Udržovatelnost.\n\n7) Dobrá použitelnost pro velké projekty vyžadující hodně spolupráce.\n\n\'\'\'Nevýhody:\'\'\'\n\n1) V některých oblastech neexistuje analogie s reálnými objekty.\n\n2) Složitější sémantika vyžaduje víc učení.\n\n3) Nemožnost porušovat zapouzdření (někdy obcházeno pomocí modifikátorů viditelnosti).\n\n4) Výsledný kód je pomalejší kvůli využívání dodatečných kontrol a odlišných metod než jsou vlastní von Neumanově architektuře.\n\n5) Problém s režií uložení objektů.\n\n----\n\n==== OBJEKT ====\n\n• Entita zapouzdřující stavové informace a poskytující sadu operací nad tímto objektem nebo jeho částmi.\n\n• Jednoznačně identifikovatelný reálný objekt (se sémantikou z obecné češtiny).\n\n• Abstrakce (v případě, že reálný objekt popisujeme abstraktním modelem) zahrnující data a jejich chování (operace nad daty). \n\n• Instance třidy obsahujici data a operace.\n\n• Entita, která rozumí zaslání některých zpráv a ve své vnitřní struktuře umožňuje zapouzdřit další objekty.\n\n• Základní jednotka modularity i struktury v OOP.\n\n• IDENTITA porovnává, zda jsou objekty totožné, zda se jedná o tentýž objekt.\n\n• SHODNOST porovnává objekty podle jejich obsahu. Shodné mohou být i neidentické objekty.\n\n====== PERZISTENTNÍ OBJEKT ======\n\n• Opakem jsou dynamické objekty, jsou vícetypové, mají více třídních typů (člověk, student, muž).\n\n• Přežívá dobu běhu aplikace a při jejím dalším spuštění je opět nezměněn a přítomen\n\n• Implementace 1: uloží se stav objektů (hodnoty atributů) někam do knihovny, metody se distribuují zvlášť.\n\n• Implementace 2: uloží se stav objektů a třída (metody), náročné, závislé na platformě, často mezikód.\n\n----\n\n==== ZPRÁVA ====\n\n• Komunikační jednotka mezi dvěma libovolnými objekty. \n\n• Kromě jména může obsahovat i dodatečné informace v podobě PARAMETRŮ (ARGUMENTŮ), které slouží pro podrobnější specifikaci zprávy a tedy i upřesnění informace předávané mezi těmito objekty. \n\n• Zaslaná zpráva ma jak svého ODESÍLATELE, tak PŘÍJEMCE (objekt, kterému je zpráva zaslána). \n\n• Sémantika: příjemce (adresát) na obdrženou zprávu od odesílatele reaguje vyhledáním patřičné implementace reakce na tuto zprávu, což bývá nejčastěji odpovídající zapouzdřená funkce - METODA. \n\n• Metody implementují veškeré chování objektů, nebo chcete-li reakce na obdržené zprávy, a mívají spolu se zprávami také shodné jméno i seznam parametrů. Množina všech zpráv, kterým objekt rozumí, tj. je schopen nalézt implementaci odpovídající metody, se nazývá PROTOKOL objektu. Někdy se též lze setkat s pojmen ROZHRANÍ objektu.\n\n• Při obdržení zprávy příjemcem mohou nastat tři různé situace:\n\n1) Objekt ve své implementaci při reagování na zprávu nalezne a zavolá příslušnou metodu.\n\n2) Objekt sice hledanou metodu neobsahuje, ale má ji některý z předků.\n\n3) Objekt implementaci odpovídající metody neobsahuje a ani nebyla nalezena v objektech předků. Nastává výjimka (chyba), že přijaté zprávě nebylo porozuměno, neboli že k ní neexistuje odpovídající metoda.\n\n• Po vykonání metody, jež reagovala na zprávu, se řízení běhu objektového programu zpravidla vrací spolu s návratovou hodnotou (pokud nějaká je) do objektu odesilatele, kde se pokračuje ve výpočtu (v metodě, která zprávu odeslala). \n\n==== ZÁKLADNÍ KONCEPT ====\n\n• Objektově orientované programování slučuje nové programovací koncepty a vylepšuje staré, aby tak dosáhlo přiblížení popisu reálného světa k lidskému způsobu uvažování.\n\n• Na toto dámy xsmies00 a xproch69 vymyslely opět pomůcku: Když příjde chlap do baru, vidí všechny ženy jako objekty. Pokud jsou ošklivé, bude do sebe muset hodit pár panáků a použít abstrakci. Při oslovení musí dát pozor na polymorfismus, protože na stejnou balící hlášku může reagovat každá žena jinak. Zadaří-li se, je třeba použít zapouzdření (prezervativ), aby nedošlo k průšvihu (dědičnost).\n\n• OBJEKTY spojují data a funkcionalitu společně do jednotek zvaných objekty, ze kterých se potom skládá výsledný objektově orientovaný program (na rozdíl od strukturovaného složeného z procedur a funkcí).\n\n• ABSTRAKCE je schopnost programu ignorovat/zjednodušit/zanedbat některé aspekty informací či vlastnosti objektů, se kterými program pracuje. Je to pohled na vybraný problém realného světa a jeho počítačové řešení. Detaily se skrývají do černé skřiňky (black box), která je pro okolí definována pouze svým rozhraním, přes které komunikuje s okolim, a nikoli vnitřnimi detail implementace. Mira abstrakce určuje, jak hodně je vzdálená funkčnost černé skříňky od reality (jak detailní je model). \n\n• POLYMORFISMUS využívá mechanismus zasílání zpráv. Konkrétní použitá metoda reagující na zaslání zprávy závisí na konkrétním objektu, jemuž je zpráva zaslána (člověk – utíkej/pes - utíkej).\n\n• ZAPOUZDŘENÍ uživatel nemůže (už na úrovni sémantiky) měnit interní stav objektů libovolným (tedy i neočekavanym) způsobem, ale musí k tomu využívat poskytované rozhraní (operace nad objektem) definované protokolem objektu. Zapouzdření má význam pro znovupoužitelnost a zásadně to zjednodušuje vývoj nových vlastností objektu.\n\n• DĚDIČNOST je způsob, jak implementovat sdílené chování. Používá se k indikaci, že objekt specializuje nějaké chování (zvíře -> pes) a pro sdílení kódu (potomek dělá to, co rodič, plus něco navíc nebo jinak).\n\n\'\'\'Jednoduchá\'\'\' – každý potomek má nejvýše jednoho předka.\n\n\'\'\'Vícenásobná\'\'\' – třída dědí od více než jednoho předka.\n\n\'\'\'Dědičnost rozhraní\'\'\' – ze snahy o vícenásobnou dědičnost, reší konflikt jmen. Jde o seznam metod, které musí potomek implementovat.\n\n\'\'\'Dědičnost implementace\'\'\' (neboli dědičnost) – kromě atributů jsou do dědičnosti zahrnuty celé metody včetně jejich implementace. Zde právě v případě vícenásobné dědičnosti vzniká problém s různými implementacemi stejných metod.\n\n• Model výpočtu: \n\n1) Pojmenování (přiřazení) objektu do proměnné (případně ukazatel nebo reference = nenulový ukazatel).\n\n2) Zaslání zprávy (identifikátor a parametry).\n\n3) Reakce závisí na objektu (nalezne a zavolá metodu, předá zprávu rodiči nebo odpoví, že zprávě neporozuměl).\n\n----\n\n== TŘÍDNĚ ZALOŽENÉ JAZYKY ==\n\n• TŘÍDA – popis, šablona, podle níž mohou být vytvářeny objekty (instance), protokol, směrování zpráv a implementace některých metod, je to zobecnění skupiny objektů.\n\n• INSTANCE TŘÍDY – vytvoření metodou konstruktor, inicializace atributů, vytvoření vazeb (statické i virtuální).\n\nHLUBOKÁ KOPIE objektu – kromě objektu se kopírují i objekty, které referují jeho proměnné.\n\nMĚLKÁ KOPIE objektu – nový objekt má jen odkazy na stejná místa jako starý, kopie atributů a vazeb na metody.\n\n• DĚDIČNOST – má-li funkce f jako parametr objekt třídy A, parametrem může být objekt třídy A nebo třídy odvozené z A.\n\nVÍCENÁSOBNÁ DĚDIČNOST: více než jedna třída použita pro odvození následující (C++) \n\nProblémy: rodiče mají entity stejného názvu a stejného/jiného typu, vybrání postupu při inicializaci, způsob uložení. \n\nŘešení: Metody lze: zakázat, zalepit, přinutit re-implementovat, u různých typů zakázat nebo povolit vedle sebe. Atributy lze: zakázat, zaslepit, sloučit, u různých typů nelze jinak než zakázat.\n\n• PODTYP je taková třída, která je odvozená z jiné třídy (někdy jde o vyžadovanou dědičnost – vyžaduje se vztah odvozené třídy při volání funkcí).\n\nSKUTEČNÝ PODTYP – jde o takovou třídu B, která sice nebyla odvozena od A, ale má s ní shodné metody a atributy.\n\n• REDEFINICE METODY – možnost jazyka definovat pro metodu podtřídy novou, specifičtější implementaci než v nadtřídě (se stejným označením), umožňuje polymorfismus, volání sebe (this, self) nebo rodiče (base, super).\n\n• ŠABLONY – třída definována kolem typu, který je v době psaní kódu neznámý (konkretizace při vytvoření instance).\n\n• POLYMORFISMUS – pozdní vazba na úrovni volání (virtuálních) metod, s jakým typem objektu se bude pracovat.\n\nČASNÁ VAZBA – při překladu již známe typ objektu.\n\nPOZDNÍ VAZBA – určení typu objektu a identifikace metody až za běhu programu, tabulky virtuálních metod (VMT), u dynamicky typovaných jazyků je pouze tato vazba, používá se algoritmus - mechanismus směrování zpráv.\n\n• JMENNÉ PROSTORY – kontejner pro identifikátory (uvnitř každý jiný) k zabránění kolizí jmen .\n\n• MODIFIKÁTORY VIDITELNOSTI pro atributy, metody, vlastnosti nebo dědičnost – soukromý (uvnitř třídy), chráněný (dostupní z metod stejné třídy nebo tříd oddělených) a veřejný (z libovolné metody), někdy v rámci jmenného prostoru.\n\n• PŘETĚŽOVÁNÍ METOD – ve třídě je více metod stejného jména odlišených v typech nebo počtech parametrů.\n\n----\n\n==== RUŠENÍ OBJEKTU ====\n\n• Automatické rušení: \n\nFINALIZACE – úklid a uvolnění zdrojů mimo objekt. \n\nGARBAGE COLLECTOR – ruší objekty nebo shluky, na které neexistuje odkaz.\n\n• Manuální rušení: DESTRUKTOR – likviduje objekty (při dědičnosti je nutné specifikovat pořadí objektů), může být virtuální, hrozí úbytky paměti (memory leaks).\n\n----\n\n==== PŘÍSTUP ====\n\n• ČISTĚ OBJEKTOVÝ - vše je objekt a existuje třída nebo objekt, od které je vše odvozeno.\n\n• HYBRIDNĚ OBJEKTOVÝ - sada základních primitivních typů, které lze skládat do struktur (kořenová třída nebo ne).\n\n----\n\n== PROTOTYPOVĚ ZALOŽENÉ JAZYKY ==\n\n• Mají pouze jeden typ objektu unifikované struktury\n\n• Javascript, Self.\n\n• SLOT – složka objektu obsahující členské proměnné nebo metody. Reakce na zprávu je prohledání všech slotů.\n\n• KLONOVÁNÍ – kopírování objektu mělkou kopií.\n\n• Rušení probíhá automaticky garbage collectorem.\n\n• DELEGACE – na zprávu reaguje objekt, na který byla delegována, příjemce zprávy je objekt, který si odpověď jako první vyžádal, takto se přeposílají zprávy rodičovským objektům (uvedeným v rodičovském slotu).\n\n• RYS – sdílené chování objektů, dynamická dědičnost – rodičovské sloty se mění, objekt mění chování.\n\n• PROTOTYP – modifikace/kopie existující instance, existence kořenového (bázového) objektu, šablona instance.\n\n• práce s daty – části objektů zpřístupňovány jako části datových struktur, private/protected/public. \n\n• definice/deklarace – naklonujeme objekt a změníme nebo definujeme třídu a vytvoříme instanci.\n\n----\n\n== NÁVRH PROGRAMU ==\n\n• analýza → návrh → implementace → údržba, objekt jsou data (ER modely…) a akce (strukturovaná analýza, konečné automaty) \n\n• Problémy: identifikace tříd a objektů, rozdělení rolí/odpovědností mezi ně, kvalita návrhu (testovatelnosti, robustnost, F a NF požadavky, QoS)\n\n• Implementace: problémy při manipulaci se třídami: ukládání metod, dědičnost, přístup atributů v metodách, instanční a třídní proměnné/metody\n\n• Řešení: v čistě objektových virtuálním strojem, jinak statické třídy nejsou uloženy v objektu ani VMT (tabulka virtuálních metod), instance třídy má dostupné svoje metody i metody všech předků.\n\n• VIRTUÁLNÍ STROJ – softwarová vrstva odstiňující HW specifika počítače, umožňující vyšší režii.\n\n----\n\n==== VYKONÁVÁNÍ KÓDU ====\n\n• Přímá interpretace ze syntaktického stromu (Ruby).\n\n• Kompilace do mezikódu (Smalltalk-80), ten je pak přeložen do nativního strojového kódu dané platformy a vykonán (Self, Java).\n\n• OBRAZY OBJEKTOVÉ PAMĚTI – uložený stav objektů, nepoužívá se často, ale zrychluje start aplikací za cenu paměti.\n\n----\n\n==== DATOVÉ TYPY ====\n\n• Přístup 1: Všechno je objekt, existuje prvotní objekt, ze kterého je vše odvozeno.\n\n• Přístup 2: Jsou bázové typy a struktury, třída je druhem struktury (kořenová třída: Java, Delphi, bez: C++).\n\n----\n\n==== NÁVRHOVÉ VZORY ====\n\n• Systém tříd (i abstraktních) pro řešení typických situací.\n\n• Vytvářecí – nepřímou cestou pro nás vytváří objekty (prototyp, jedináček - omezuje možnost třídy vytvářet víc než jednu instanci, veřejná metoda, soukromá proměnná a zákaz volání konstruktoru z ostatních tříd).\n\n• Strukturální – napomáhají při shlukování objektů do celků (dekorátor, adaptér, kontejner, proxy).\n\n• Chování – pomáhají při definici komunikace a toku řízení (observer, návštěvník).\n\n• Další – (stromová struktura = composite, sekvenční průchod = iterator, definice nových metod bez re-definice = visitor).','utf-8'),(1278,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 07\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(1%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06 (07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1279,'[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.','utf-8'),(1280,'[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,^,_,\' , 0, 1), která splňuje následující axiomy:\n\n===Komutativnost===\n\n===Asociativnost===\n===Idempotence===\n===Absorbce===','utf-8'),(1281,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,^,_,\' , 0, 1), která splňuje následující axiomy:\n\n===Komutativnost===\n\n===Asociativnost===\n===Idempotence===\n===Absorbce===','utf-8'),(1282,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,^,_,\' , 0, 1), která splňuje následující axiomy:\n\n===Komutativnost===\n\n===Asociativnost===\n===Idempotence===\n===Absorbce===\n\n\naaaaaaaaaaaaaaaaaaaaa_???????????????????????','utf-8'); INSERT INTO `text` VALUES (1283,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 07\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(5%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06 (07, 08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1284,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\nŘetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech. Pokud použijeme zřetězené zpracování v procesoru, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů.\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků\n\n----\n\n\n\'\'\'Konflikty u řetězeného zpracování v procesorech, které mohou vést ke zpomalení linky:\'\'\'\n# \'\'\'Strukturální\'\'\' – obvodová struktura neumožňuje současné provedení určitých akcí – např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU.\n# \'\'\'Datové\'\'\' – když jsou zapotřebí data z předcházející instrukce, která není dokončena.\n# \'\'\'Řídicí\'\'\' – když skoková instrukce mění obsah PC, nebo jiné.\n\n\n\n\'\'\'Řešení těchto problémů:\'\'\'\n# \'\'\'Strukturální\'\'\' - rozdělit paměť na paměť instrukcí a paměť dat. Obecné řešení je například přidání výpočetních jednotek procesoru.\n# \'\'\'Datové\'\'\' - řešením může být \'\'\'bypassing\'\'\' - poskytnutí mezivýsledku dřív, než bude zapsán do registru. Je to umožněno přidáním speciálních datových cest\n# \'\'\'Řídící\'\'\' - problémy se skokovými instrukcemi. Možná řešení:\n## Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu.\n## Nelze-li takové užitečné instrukce najít, vložit NOPy (no operation).\n## Predikce skoku, rozpracovat pouze predikovanou možnost.\n## Rozpracovat obě možnosti pokračování skokové instrukce.\n\nU všech skoků je třeba zrychlit zjištění cílové adresy – k tomu se používá malá paměť cache pro uložení cílových adres (BTB – Branch Target Buffer), která se postupně naplňuje a aktualizuje. Pro nepodmíněné skoky a pro správně predikované podmíněné skoky se zřetězená linka nepozastaví.\n\n----\n\n\n====CISC====\nComplex Instruction Set Computing. Původní přístup k činnosti procesoru. Programy byly vytvářeny v assembleru ručně, co vedlo na vytváření komplikovaných a snadno použitelných instrukcií, různé adresové režimy, kombinované instrukce a pod. To dává velké možnosti optimalizace kódu a poskytuje obrovskou rychlost pro výpočet. Nevýhodou je, že kromě rozsahu instrukčního souboru trvá provedení každé instrukce různou dobu, co vede při použití řetězeného zpracování na velkou složitost řadiče. Ten je při CISC často tvořen dalším procesorem (mikrořadičem) obsahujícím vlastní mikroprogram (firmware). Při takto rozsáhlých instrukčních souborech je problém s překladem (překládač neumí využít všechny instrukce a adresové módy) což vedlo na zavedení architektury RISC. Aktuálně jsou dostupné procesory, které kombinují rysy obou přístupů (RISC i CISC).\n\n\nCISC architektura se jednoduše programuje a efektivně využívá paměť. Dříve se většinou programovalypočítače v asembleru a paměť byla pomalá a drahá, CISC architektura tedy měla svůj význam.\n# velké množství instrukcí (100-250)\n# instrukce o proměnné délce\n# instrukce pracují s operandy v paměti\n# velké množství adresovacích módů\n# mnoho a složité způsovy adresování\n\nS rostoucím objemem sady instrukcí však byo pro překladače překládající programy do strojového kódu obtížné využít celou škálu speciálních instrukcí --> jsou používány jen zřídka\n\n======Mikroprogram======\nKaždá složitější instrukce v CISC architekturách je rozložena na posloupnost tzv. mikroinstrukcí mikroprogramu, které jsou pak provedeny. Pro každou instrukci byl dříve mikroprogram, dnes je v CISC architekturách trend jednoduché instrukce převádět také na logické obvody, jako je tomu v RISC (kvůli rychlosti). Složitější instrukce jsou ale stále řešeny přes mikroprogram, protože implementace každé takové instrukce přes logické obvody by byla drahá a CISC počítače (PC) jsou určeny pro levnější cenovou třídu. Mikroprogram je uložený v ROM paměti. Výhoda mikroprogramu je také to, že přidání dalších instrukcí procesoru (přechod na vyšší verzi) znamená přidání mikroprogramu pro tuto instrukci, netřeba měnit obvody.\n\n----\n\n\n====RISC====\nReduced Instruction Set Computing.\n\n# Unifikovaný formát instrukcí – Vždy najdeme na stejných pozicích opcode a operand(y), což značně zjednodušuje dekódování instrukcí.\n# V jednom taktu se provádí jedna instrukce.\n# Identické registry, takže můžeme použít kterýkoliv z nich k čemukoliv chceme.\n# Jednoduché adresování – používá výhradně instrukcí LOAD a STORE.\n# Málo datových typů v hardwaru.\n\nNovější koncepce procesorů. Vychází z rozvoje překladačů a vysokoúrovňových jazyků, které ale omezují využití pokročilejších instrukcí CISC procesorů (překládač nedokáže kód tak dobře optimalizovat). V základě jde o to, že RISC má méně a jednodušších instrukcí, ale zato se provádí rychleji (ideálně všechny v jednom taktu) a tím usnadňují vývoj software ve vysokoúrovňovém jazyce. Řadič instrukcí pak nemusí obsahovat mikroprogram, ale je řešen pevnou logikou, co umožňuje větší frekvence. Rovněž zlepšují možnosti návrhu zřetězeného zpracování a zjednodušují návrh paralelismu. Procesory RISC mají většinou méně tranzistorů, což umožňuje přidat více registrů.\n\nRISC procesory mají nedestruktivní instrukce: výsledek operace se dává do jiného registru, než operandy. Používají se sady registrů např. k přepínání kontextu. Podprogram používá svoje registry, v původních tedy zůstavají data, která tam byla před skokem. Sady registrů jsou drahé. Dnes najdeme procesory RISC převevším ve vestavěných zařízeních.\n\n\nKoncepce RISC se netýká jen pouhého redukování instrukčního souboru. Je to spíše celá soustava a představ o tom, jak by měl být počítač realizován a jak by měl fungovat. Architektura RISC realizuje na první pohled paradoxní požadavek - větší výkon za nižší cenu a s jednodušším instrukčním souborem\n\n\'\'\'Charakteristické znaky:\'\'\'\n# minimální instrukční soubor (80-150 instrukcí)\n# jednoduché způsoby adresování\n# jednocyklové strojové operace\n# jeden nebo málo formátů instrukcí\n# řízení jednoduchou pevnou logikou\n# zřetězená realizace instrukcí\n\n\n\'\'\'Výhody:\'\'\'\n# redukovaná množina instrukcí\n# menší složitost, jednoduché instrukce\n# instrukce mají pevnou délku a neměnný formát\n# v každém strojovém cyklu pokud možno končí provedení jedné instrukce','utf-8'),(1285,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\nŘetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech. Pokud použijeme zřetězené zpracování v procesoru, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů.\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků\n\n----\n\n\n\'\'\'Konflikty u řetězeného zpracování v procesorech, které mohou vést ke zpomalení linky:\'\'\'\n# \'\'\'Strukturální\'\'\' – obvodová struktura neumožňuje současné provedení určitých akcí – např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU.\n# \'\'\'Datové\'\'\' – když jsou zapotřebí data z předcházející instrukce, která není dokončena.\n# \'\'\'Řídicí\'\'\' – když skoková instrukce mění obsah PC, nebo jiné.\n\n\n\n\'\'\'Řešení těchto problémů:\'\'\'\n# \'\'\'Strukturální\'\'\' - rozdělit paměť na paměť instrukcí a paměť dat. Obecné řešení je například přidání výpočetních jednotek procesoru.\n# \'\'\'Datové\'\'\' - řešením může být \'\'\'bypassing\'\'\' - poskytnutí mezivýsledku dřív, než bude zapsán do registru. Je to umožněno přidáním speciálních datových cest\n# \'\'\'Řídící\'\'\' - problémy se skokovými instrukcemi. Možná řešení:\n## Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu.\n## Nelze-li takové užitečné instrukce najít, vložit NOPy (no operation).\n## Predikce skoku, rozpracovat pouze predikovanou možnost.\n## Rozpracovat obě možnosti pokračování skokové instrukce.\n\nU všech skoků je třeba zrychlit zjištění cílové adresy – k tomu se používá malá paměť cache pro uložení cílových adres (BTB – Branch Target Buffer), která se postupně naplňuje a aktualizuje. Pro nepodmíněné skoky a pro správně predikované podmíněné skoky se zřetězená linka nepozastaví.\n\n----\n\n\n====CISC====\nComplex Instruction Set Computing. Původní přístup k činnosti procesoru. Programy byly vytvářeny v assembleru ručně, co vedlo na vytváření komplikovaných a snadno použitelných instrukcií, různé adresové režimy, kombinované instrukce a pod. To dává velké možnosti optimalizace kódu a poskytuje obrovskou rychlost pro výpočet. Nevýhodou je, že kromě rozsahu instrukčního souboru trvá provedení každé instrukce různou dobu, co vede při použití řetězeného zpracování na velkou složitost řadiče. Ten je při CISC často tvořen dalším procesorem (mikrořadičem) obsahujícím vlastní mikroprogram (firmware). Při takto rozsáhlých instrukčních souborech je problém s překladem (překládač neumí využít všechny instrukce a adresové módy) což vedlo na zavedení architektury RISC. Aktuálně jsou dostupné procesory, které kombinují rysy obou přístupů (RISC i CISC).\n\n\nCISC architektura se jednoduše programuje a efektivně využívá paměť. Dříve se většinou programovalypočítače v asembleru a paměť byla pomalá a drahá, CISC architektura tedy měla svůj význam.\n# velké množství instrukcí (100-250)\n# instrukce o proměnné délce\n# instrukce pracují s operandy v paměti\n# velké množství adresovacích módů\n# mnoho a složité způsovy adresování\n\nS rostoucím objemem sady instrukcí však byo pro překladače překládající programy do strojového kódu obtížné využít celou škálu speciálních instrukcí --> jsou používány jen zřídka\n\n======Mikroprogram======\nKaždá složitější instrukce v CISC architekturách je rozložena na posloupnost tzv. mikroinstrukcí mikroprogramu, které jsou pak provedeny. Pro každou instrukci byl dříve mikroprogram, dnes je v CISC architekturách trend jednoduché instrukce převádět také na logické obvody, jako je tomu v RISC (kvůli rychlosti). Složitější instrukce jsou ale stále řešeny přes mikroprogram, protože implementace každé takové instrukce přes logické obvody by byla drahá a CISC počítače (PC) jsou určeny pro levnější cenovou třídu. Mikroprogram je uložený v ROM paměti. Výhoda mikroprogramu je také to, že přidání dalších instrukcí procesoru (přechod na vyšší verzi) znamená přidání mikroprogramu pro tuto instrukci, netřeba měnit obvody.\n\n----\n\n\n====RISC====\nReduced Instruction Set Computing.\n\n# Unifikovaný formát instrukcí – Vždy najdeme na stejných pozicích opcode a operand(y), což značně zjednodušuje dekódování instrukcí.\n# V jednom taktu se provádí jedna instrukce.\n# Identické registry, takže můžeme použít kterýkoliv z nich k čemukoliv chceme.\n# Jednoduché adresování – používá výhradně instrukcí LOAD a STORE.\n# Málo datových typů v hardwaru.\n\nNovější koncepce procesorů. Vychází z rozvoje překladačů a vysokoúrovňových jazyků, které ale omezují využití pokročilejších instrukcí CISC procesorů (překládač nedokáže kód tak dobře optimalizovat). V základě jde o to, že RISC má méně a jednodušších instrukcí, ale zato se provádí rychleji (ideálně všechny v jednom taktu) a tím usnadňují vývoj software ve vysokoúrovňovém jazyce. Řadič instrukcí pak nemusí obsahovat mikroprogram, ale je řešen pevnou logikou, co umožňuje větší frekvence. Rovněž zlepšují možnosti návrhu zřetězeného zpracování a zjednodušují návrh paralelismu. Procesory RISC mají většinou méně tranzistorů, což umožňuje přidat více registrů.\n\nRISC procesory mají nedestruktivní instrukce: výsledek operace se dává do jiného registru, než operandy. Používají se sady registrů např. k přepínání kontextu. Podprogram používá svoje registry, v původních tedy zůstavají data, která tam byla před skokem. Sady registrů jsou drahé. Dnes najdeme procesory RISC převevším ve vestavěných zařízeních.\n\n\nKoncepce RISC se netýká jen pouhého redukování instrukčního souboru. Je to spíše celá soustava a představ o tom, jak by měl být počítač realizován a jak by měl fungovat. Architektura RISC realizuje na první pohled paradoxní požadavek - větší výkon za nižší cenu a s jednodušším instrukčním souborem\n\n\'\'\'Charakteristické znaky:\'\'\'\n# minimální instrukční soubor (80-150 instrukcí)\n# jednoduché způsoby adresování\n# jednocyklové strojové operace\n# jeden nebo málo formátů instrukcí\n# řízení jednoduchou pevnou logikou\n# zřetězená realizace instrukcí\n\n\n\'\'\'Výhody:\'\'\'\n# redukovaná množina instrukcí\n# menší složitost, jednoduché instrukce\n# instrukce mají pevnou délku a neměnný formát\n# v každém strojovém cyklu pokud možno končí provedení jedné instrukce\n\n----','utf-8'),(1286,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(5%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1287,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1288,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 09, 10, 17, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(5%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1289,'','utf-8'),(1290,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nHruška: n-ární relace R je libovolná podmnožina kartézského součinu.\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nV definice relace jsme určili, že relace má jistou aritu (je n-ární). Pro malá n máme pro relace speciální názvy: pro n=2 se relace nazývá binární relace\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n===Funkce===\n[[Soubor:Funkce.png]]\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n[[Soubor:Svaz.png]]\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1291,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 10, 17, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 09\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(5%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1292,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====','utf-8'),(1293,'','utf-8'),(1294,'','utf-8'),(1295,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 10, 17, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 19, 09\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 18, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19(15%) 23, 24 (17, 20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1296,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,^,_,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n* tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n\n===Komutativnost===\n===Asociativnost===\n===Distributivnost===\n===Idempotence===\n===Absorbce===\n===Absorbce negace===\n===Existence prvků 1 a 0===\n===Existence komplementu===\n====Existence jediného komplementu====\n===Nulové prvky v součtu a součinu===\n===Sousednost===\n===Concenzus===\n===Teorém===\n===de Morganovy Zákony===','utf-8'),(1297,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n* tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n\n===Komutativnost===\n===Asociativnost===\n===Distributivnost===\n===Idempotence===\n===Absorbce===\n===Absorbce negace===\n===Existence prvků 1 a 0===\n===Existence komplementu===\n====Existence jediného komplementu====\n===Nulové prvky v součtu a součinu===\n===Sousednost===\n===Concenzus===\n===Teorém===\n===de Morganovy Zákony===','utf-8'),(1298,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n\n===Komutativnost===\n===Asociativnost===\n===Distributivnost===\n===Idempotence===\n===Absorbce===\n===Absorbce negace===\n===Existence prvků 1 a 0===\n===Existence komplementu===\n====Existence jediného komplementu====\n===Nulové prvky v součtu a součinu===\n===Sousednost===\n===Concenzus===\n===Teorém===\n===de Morganovy Zákony===','utf-8'),(1299,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\n==Asociativnost==\n==Distributivnost==\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1300,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nx - zobrazované číslo\nX - obraz zobrazovaného čísla\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>','utf-8'),(1301,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\n==Asociativnost==\n(a+b)+c = a+(b+c)\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1302,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1303,'','utf-8'),(1304,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1305,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1306,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1307,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1308,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na.0 = 0\n\na+1 = 1\n\na.1 = a\n\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1309,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na*0 = 0\n\na+1 = 1\n\na*1 = a\n\n==Existence komplementu==\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1310,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na*0 = 0\n\na+1 = 1\n\na*1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro\nkterý platí:\na+a\'=1\na⋅a\'=0\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a,\nnebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1311,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na*0 = 0\n\na+1 = 1\n\na*1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro\nkterý platí:\na+a\'=1\na⋅a\'=0\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1312,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na*0 = 0\n\na+1 = 1\n\na*1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1313,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b).(a+c) = a.(b+c)\n\n(a.b)+(a.c) = a+(b.c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1314,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a.b).c = a.(b.c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1315,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na.b = b.a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1316,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1317,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1318,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\na + a⋅b = a\n\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1319,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\n===Existence jediného komplementu===\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1320,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1321,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Nulové prvky v součtu a součinu==\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1322,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1323,'','utf-8'),(1324,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Nulové prvky v součtu a součinu==\na+1 = 1\n\na⋅0 = 0\n\nTo samé co je nad tím, ale někdo to uvádí jako samostatnou věc.\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1325,'','utf-8'),(1326,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n==Nulové prvky v součtu a součinu==\na+1 = 1\n\na⋅0 = 0\n\nTo samé co je nad tím, ale někdo to uvádí jako samostatnou věc.\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\nNebo taky booleovská sousednost.\n\na⋅b+a⋅b\' = a\n\n(a+b)⋅(a+b\') = a\n\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1327,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n===Nulové prvky v součtu a součinu===\na+1 = 1\n\na⋅0 = 0\n\nTo samé co je nad tím, ale někdo to uvádí jako samostatnou věc.\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\nNebo taky booleovská sousednost.\n\na⋅b+a⋅b\' = a\n\n(a+b)⋅(a+b\') = a\n\n==Concenzus==\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1328,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n===Nulové prvky v součtu a součinu===\na+1 = 1\n\na⋅0 = 0\n\nTo samé co je nad tím, ale někdo to uvádí jako samostatnou věc.\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\nNebo taky booleovská sousednost.\n\na⋅b+a⋅b\' = a\n\n(a+b)⋅(a+b\') = a\n\n==Concenzus==\n(a+b)⋅(a\'+c)⋅(b+c) = (a+b)⋅(a\'+c)\n\na⋅b + a\'⋅c + b⋅c = a⋅b + a\'⋅c\n\n==Teorém==\n==de Morganovy Zákony==','utf-8'),(1329,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n===Nulové prvky v součtu a součinu===\na+1 = 1\n\na⋅0 = 0\n\nTo samé co je nad tím, ale někdo to uvádí jako samostatnou věc.\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\nNebo taky booleovská sousednost.\n\na⋅b+a⋅b\' = a\n\n(a+b)⋅(a+b\') = a\n\n==Concenzus==\n(a+b)⋅(a\'+c)⋅(b+c) = (a+b)⋅(a\'+c)\n\na⋅b + a\'⋅c + b⋅c = a⋅b + a\'⋅c\n\n==Teorém==\n(a+b)⋅(a+b\'+c) = (a+b)⋅(a+c)\n\na⋅b + a⋅b\'⋅c = a⋅b + a⋅c\n\n==de Morganovy Zákony==','utf-8'),(1330,'=Co to je?=\n[http://cs.wikipedia.org/wiki/Distributivita Distributivní] [http://cs.wikipedia.org/wiki/Komplementarita komplementární] [https://havranipapuce.varak.net/index.php?title=16_Mno%C5%BEiny,_relace_a_zobrazen%C3%AD#Relace_na_mno.C5.BEin.C4.9B svaz] se nazývá Booleova algebra.\n\nBooleova algebra je algebraická struktura, která zachytává podstatné vlastnosti množinových jako i logických operací.\n\nBooleova algebra je tedy algebra se dvěma binárními operacemi <m>wedge,V</m> s jednou tzv. unární operací (\'), která každému prvku přiřazuje jeho komplement, a se dvěma význačnými prvky 0, 1 – tedy (A,<m>wedge</m>,V,\' , 0, 1), která splňuje následující axiomy: Komutativnost, Asiciativnost, Idempocence a Absobrce.\n\n//\'\'tyto popsané axiomy jsou platné pro jakýkoli svaz. Jiné zdroje uvádějí axiomy jiné. Jsou to však tvrzení pravdivá podle všech zdrojů, jen se liší pohled na to, které jsou základní a které jsou odvozené.\'\'\n\nPokud boolovu algebru nadefinujeme jako svaz musíme dodat, že platí involuce (dvojí negace), de Morganovy zákony a vztah B_3 z obrázku.\n\n[[Soubor:B_plati.png]]\n(IDA - durnová)\n\nV materiálech ke státnícím ale Pirožek a Karel uvádějí jako povinne: komutativnost, distributivnost, existenci prvků 1 a 0 (a jejich agresivitu) a existenci komplementu.\n==Komutativnost==\na+b = b+a\n\na⋅b = b⋅a\n\n==Asociativnost==\n(a+b)+c = a+(b+c)\n\n(a⋅b)⋅c = a⋅(b⋅c)\n\n==Distributivnost==\n(a+b)⋅(a+c) = a⋅(b+c)\n\n(a⋅b)+(a⋅c) = a+(b⋅c)\n\n==Existence prvků 1 a 0==\nv množině B existují dva význačné prvky 0 a 1, takové, že pro ∀ a∈B platí:\n\na+0 = a\n\na⋅0 = 0\n\na+1 = 1\n\na⋅1 = a\n\n===Nulové prvky v součtu a součinu===\na+1 = 1\n\na⋅0 = 0\n\nTo samé co je nad tím, ale někdo to uvádí jako samostatnou věc.\n\n==Existence komplementu==\npro ∀ a∈B existuje komplement tohoto prvku a\' , pro který platí:\n\na+a\'=1\n\na⋅a\'=0\n\nKomplement představuje negaci příslušné logické proměnné. Značí se taky NOT(a), ~a, nebo čarou nad proměnnou, nebo ¬a . Log. obvody na vytvoření negace využívají člen NOT (invertor).\n\n===Existence jediného komplementu===\nkomplement a\' libovolného prvku a∈B je jediný.\n\n==Idempotence==\na+a = a\n\na⋅a = a\n\n==Absorbce==\na⋅(a+b) = a\n\na + a⋅b = a\n\n==Absorbce negace==\na⋅(a\'+b) = a⋅b\na+a\'⋅b = a+b\n\n==Sousednost==\nNebo taky booleovská sousednost.\n\na⋅b+a⋅b\' = a\n\n(a+b)⋅(a+b\') = a\n\n==Concenzus==\n(a+b)⋅(a\'+c)⋅(b+c) = (a+b)⋅(a\'+c)\n\na⋅b + a\'⋅c + b⋅c = a⋅b + a\'⋅c\n\n==Teorém==\n(a+b)⋅(a+b\'+c) = (a+b)⋅(a+c)\n\na⋅b + a⋅b\'⋅c = a⋅b + a⋅c\n\n==de Morganovy Zákony==\n(a+b)\' = a\'⋅b\'\n\n(b⋅a)\' = a\'+b\'','utf-8'),(1331,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 10, 20, 21, 22, 25, 32, 33, 37\n\n\'\'\'Zpracovává se\'\'\': 15, 17, 09\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17(1%) (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36 (10, 32, 33, 37)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1332,'','utf-8'),(1333,'','utf-8'),(1334,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 3\n## 00000011\n# x = -3\n## 11111100\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----','utf-8'),(1335,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 28\n## 00011100\n# x = -28\n## 11100011\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----','utf-8'),(1336,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 28\n## 00011100\n# x = -28\n## 11100011\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----\n\n====Pohyblivá řádová čárka====','utf-8'),(1337,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\nSTART: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\nANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\nTEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\nTHEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\nELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\nA DEC 56 ; definice hodnoty A (zvoleno 56)\n\nB DEC -11 ; definice hodnoty B (zvoleno -11)\n\nC RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\nSTART 5 00101\n\nA 22 10110\n\nANEG 10 01010\n\nB 23 10111\n\nTHEN 16 10000\n\nTEST 13 01101\n\nELSE 19 10011\n\nC 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\nSTART: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\nANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\nTEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\nTHEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\nELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\nA DEC 56 10110 00111000\n\nB DEC -11 10111 11110101\n\nC RESB 1 11000 xxxxxxxx\n\n END START\n\n---- \n\n==== REGISTRY ==== \n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n• Přenosové instrukce\n\nMOV cíl, zdroj MOVe zkopíruje obsah zdroje do cíle\n\nXCHG cíl, zdroj eXCHanGe zamění obsah zdroje a cíle\n\nLAHF Load Flags into AH register do AH uloží některé příznaky\n\nSAHF Load Flags from AH register z AH načte některé příznaky\n\nLEA cíl, zdroj Load Effective Address naplní cílový registr efektivní adresou zdrojového operandu\n\nCBW\n\nCWD\n\nCDQ Convert Byte to Word\nConvert Word to Doubleword\nConvert Doubleword to Quadword tato skupina instrukcí provádí znaménkové roztažení\n\nNOP No OPeration prázdná operace – provádí instrukci XCHG AX, AX\n\n• Instrukce zásobníku\n\nPUSH zdroj PUSH onto stack na vrchol zásobníku uloží obsah zdroje\n\nPOP cíl POP a value from stack odebere hodnotu z vrcholu zásobníku, kterou uloží do cíle\n\nPUSHA PUSH All general-purpose registers onto stack uloží na zásobník (E)AX, (E)BX, (E)CX, (E)DX, původní (E)SP, (E)BP, (E)SI a (E)DI\n\nPOPA POP All general-purpose registers from stack ze zásobníku obnoví registry uložené pomocí instrukce PUSHA\n\nPUSHF PUSH Flags register onto stack uloží na vrchol zásobníku příznakový registr\n\nPOPF POP Flags register from stack výběr příznakového registru z vrcholu zásobníku\n\n• Instrukce binární aritmetiky\n\nINC cíl INCrement k cíli přičte 1, bez kontroly přetečení - nenastavuje CF!\n\nADD cíl, zdroj integer ADD součet zdroje a cíle je uložen do cíle, je-li zdroj menší (8b zdroj a 16b cíl), před součtem se aplikuje znaménkové roztažení\n\nADC cíl, zdroj ADd with Carry viz. ADD společně s připočtením obsahu CFk cíli\n\nDEC cíl DECrement od cíle odečte 1 - nenastavuje CF!\n\nSUB cíl, zdroj SUBtraction odečte zdroj od cíle a výsledek uloží do cíle\n\nSBB cíl, zdroj SuBtraction with Burrow viz. SUB se zohledněním hodnoty CF\n\nMUL zdroj unsigned MULtiplication bezznaménkové násobení zdroje se střádačem\n\nIMUL zdroj sIgned MULtiplication znaménkové násobení (viz. MUL)\n\nDIV zdroj unsigned DIVision bezznaménkové dělení střádače se zdrojem (o poloviční délce)\n\n16b/8bAX / zdroj→celočíselný podíl do AL→zbytek do AH\n\n32b/16bDX:AX / zdroj→celočíselný podíl do AX→zbytek do DX\n\n64b/32bEDX:EAX / zdroj→celočíselný podíl do EAX→zb. do EDX\n\nIDIV zdroj sIgned DIVision znaménkové dělení (viz. DIV)\n\nNEG cíl two\'s complement NEGation if (cíl == 0) {CF = 0;} else {cíl = -cíl; CF = 1;}\n\nCMP cíl, zdroj CoMPare two operands provede nedestruktivní (výsledek zahodí, jen dle něj nastavuje příznaky) odečtení zdroje od cíle a tím je porovná\n\n• Logické instrukce\n\nAND cíl, zdroj AND logický součin\n\nOR cíl, zdroj OR logický součet\n\nXOR cíl, zdroj eXclussive OR nonekvivalence\n\nNOT cíl Negation of One complemenT logická negace cílového operandu\n\nTEST cíl, zdroj TEST of and nedestruktivní AND (nastaví příznaky, neukládá výsledek)\n \n• Instrukce posuvů a rotací\n\nSHL cil, [počet] SHift Left posune bity doleva o hodnotu operandu počet; zprava doplňuje nulami; bit s nejvyšší vahou (dále MSB) přesune do CF\n\nSHR cil, [počet] SHift Right posune bity doprava o hodnotu operandu počet; zleva doplňuje nulami; bit s nejnižší vahou (dále LSB) přesune do CF\n\nSAR cil, [počet] Shift Arithmetic Right posune bity doprava o hodnotu operandu počet; zleva doplňuje hodnotou z MSB; LSB přesouvá do CF\n\nROL cil, počet ROtate Left rotuje bity v cíli zprava doleva; v každém kroku uloží MSB do CF\n\nROR cil, počet ROtate Right rotuje bity v cíli zleva doprava; v každém kroku uloží LSB do CF\n\nRCL cil, počet Rotate trough Carry flag Left rotuje bity v cíli zprava doleva; CF se používá jako 9. (resp. 17.) bit cíle, čili MSB\n\nRCR cil, počet Rotate trough Carry flag Right rotuje bity v cíli zleva doprava; CF se k cíli „přimkne“ zprava (bere se jako LSB)\n\n• Instrukce ovládání příznaků\n\nSTC SeT Carry flag nastavuje příznak přenosu do log. 1\n\nCLC CLear Carry flag nuluje příznak přenosu\n\nCMC CompleMent Carry flag negace příznaku přenosu\n\nSTD SeT Direction flag nastaví příznak směru průchodu řetězcových dat do log. 1\n\nCLD CLear Direction flag nuluje příznak směru průchodu řetězcových dat\n\nSTI SeT Interrupt enable flag nastaví příznak povolení přerušení do log. 1\n\nCLI CLear Interrupt enable flag nuluje příznak povolení přerušení\n\n• Instrukce nepodmíněných skoků\n\nJMP [SHORT] návěští\n\nJMP návěští\n\nJMP reg16/mem16\n\nJMP seg:off\n\nJMP mem16:16 krátký relativní skok\nblízký relativní skok\nblízký nepřímý absolutní skok\ndaleký absolutní skok\ndaleký nepřímý absolutní skok\n\nJ[N]C\n\nJ[N]O\n\nJ[N]S\n\nJ[N]Z Jump if [Not] Carry flag\nJump if [Not] Overflow flag\nJump if [Not] Sign flag\nJump if [Not] Zero flag skok podmíněný stavem příznaku přenosu\nskok podmíněný stavem příznaku přetečení\nskok podmíněný stavem příznaku znaménka (MSB)\nskok podmíněný hodnotou nulového příznaku\n\nJCXZ\n\nJECXZ Jump if CX is Zero\nJump if ECX skok podmíněný nulovou hodnotou registru CX nebo ECX (jedná se o dvě různé instruce)\n\n• Instrukce smyček\n\nLOOP návěští LOOP kombinace instrukcí DEC CX a JNZ (dekrementuje obsah registru (E)CX a dokud není nulový, skáče na návěští)\n\nLOOPE návěští\n\nLOOPZ návěští LOOP while Equal\n\nLOOP while Zero instrukce LOOP rozšířená o testování nulového příznaku\n\nLOOPNE návěští\n\nLOOPNZ návěští LOOP while Not Equal\nLOOP while Not Zero analogie k předchozí instrukci\n\n• Řetězcové instrukce\n\nMOVS MOVe data from String to string kopíruje zdrojová data na adresu cílových dat\n\nCMPS CoMPare String operands porovnává řetězcová data (provádí nedestruktivní rozdíl zdroj – cíl) a podle výsledků nastavuje příznaky\n\nSCAS SCAn String porovnává hodnotu cílových dat s hodnotou uloženou ve střádači (AL/AX/EAX)\n\nLODS LOaD String načte hodnotu z adresy zdrojových dat do střádače\n\nSTOS STOre String uloží obsah střádače na adresu cílových dat\n\nINS INput from port to String přenese hodnotu z I/O portu adresovaného obsahem registru DX na adresu cílových dat\n\nOUTS OUTput String to port přenese hodnotu z adresy zdrojových dat na I/O port adresovaný obsahem registru DX','utf-8'),(1338,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n---- \n\n==== REGISTRY ==== \n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n• Přenosové instrukce\n\n MOV cíl, zdroj MOVe zkopíruje obsah zdroje do cíle\n\n XCHG cíl, zdroj eXCHanGe zamění obsah zdroje a cíle\n\n LAHF Load Flags into AH register do AH uloží některé příznaky\n\n SAHF Load Flags from AH register z AH načte některé příznaky\n\n LEA cíl, zdroj Load Effective Address naplní cílový registr efektivní adresou zdrojového operandu\n\n CBW Convert Byte to Word\n\n CWD Convert Word to Doubleword\n\n CDQ Convert Doubleword to Quadword tato skupina instrukcí provádí znaménkové roztažení\n\n NOP No OPeration prázdná operace – provádí instrukci XCHG AX, AX\n\n• Instrukce zásobníku\n\n PUSH zdroj PUSH onto stack na vrchol zásobníku uloží obsah zdroje\n\n POP cíl POP a value from stack odebere hodnotu z vrcholu zásobníku, kterou uloží do cíle\n\n PUSHA PUSH All general-purpose registers onto stack uloží na zásobník (E)AX, (E)BX, (E)CX, (E)DX, původní (E)SP, (E)BP, (E)SI a (E)DI\n\n POPA POP All general-purpose registers from stack ze zásobníku obnoví registry uložené pomocí instrukce PUSHA\n\n PUSHF PUSH Flags register onto stack uloží na vrchol zásobníku příznakový registr\n\n POPF POP Flags register from stack výběr příznakového registru z vrcholu zásobníku\n\n• Instrukce binární aritmetiky\n\n INC cíl INCrement k cíli přičte 1, bez kontroly přetečení - nenastavuje CF!\n\n ADD cíl, zdroj integer ADD součet zdroje a cíle je uložen do cíle, je-li zdroj menší (8b zdroj a 16b cíl), před součtem se aplikuje znaménkové roztažení\n\n ADC cíl, zdroj ADd with Carry viz. ADD společně s připočtením obsahu CFk cíli\n\n DEC cíl DECrement od cíle odečte 1 - nenastavuje CF!\n\n SUB cíl, zdroj SUBtraction odečte zdroj od cíle a výsledek uloží do cíle\n\n SBB cíl, zdroj SuBtraction with Burrow viz. SUB se zohledněním hodnoty CF\n\n MUL zdroj unsigned MULtiplication bezznaménkové násobení zdroje se střádačem\n\n IMUL zdroj sIgned MULtiplication znaménkové násobení (viz. MUL)\n\n DIV zdroj unsigned DIVision bezznaménkové dělení střádače se zdrojem (o poloviční délce)\n\n 16b/8bAX / zdroj→celočíselný podíl do AL→zbytek do AH\n\n 32b/16bDX:AX / zdroj→celočíselný podíl do AX→zbytek do DX\n\n 64b/32bEDX:EAX / zdroj→celočíselný podíl do EAX→zb. do EDX\n\n IDIV zdroj sIgned DIVision znaménkové dělení (viz. DIV)\n\n NEG cíl two\'s complement NEGation if (cíl == 0) {CF = 0;} else {cíl = -cíl; CF = 1;}\n\n CMP cíl, zdroj CoMPare two operands provede nedestruktivní (výsledek zahodí, jen dle něj nastavuje příznaky) odečtení zdroje od cíle a tím je porovná\n\n• Logické instrukce\n\n AND cíl, zdroj AND logický součin\n\n OR cíl, zdroj OR logický součet\n\n XOR cíl, zdroj eXclussive OR nonekvivalence\n\n NOT cíl Negation of One complemenT logická negace cílového operandu\n\n TEST cíl, zdroj TEST of and nedestruktivní AND (nastaví příznaky, neukládá výsledek)\n \n• Instrukce posuvů a rotací\n\n SHL cil, [počet] SHift Left posune bity doleva o hodnotu operandu počet; zprava doplňuje nulami; bit s nejvyšší vahou (dále MSB) přesune do CF\n\n SHR cil, [počet] SHift Right posune bity doprava o hodnotu operandu počet; zleva doplňuje nulami; bit s nejnižší vahou (dále LSB) přesune do CF\n\n SAR cil, [počet] Shift Arithmetic Right posune bity doprava o hodnotu operandu počet; zleva doplňuje hodnotou z MSB; LSB přesouvá do CF\n\n ROL cil, počet ROtate Left rotuje bity v cíli zprava doleva; v každém kroku uloží MSB do CF\n\n ROR cil, počet ROtate Right rotuje bity v cíli zleva doprava; v každém kroku uloží LSB do CF\n\n RCL cil, počet Rotate trough Carry flag Left rotuje bity v cíli zprava doleva; CF se používá jako 9. (resp. 17.) bit cíle, čili MSB\n\n RCR cil, počet Rotate trough Carry flag Right rotuje bity v cíli zleva doprava; CF se k cíli „přimkne“ zprava (bere se jako LSB)\n\n• Instrukce ovládání příznaků\n\n STC SeT Carry flag nastavuje příznak přenosu do log. 1\n\n CLC CLear Carry flag nuluje příznak přenosu\n\n CMC CompleMent Carry flag negace příznaku přenosu\n\n STD SeT Direction flag nastaví příznak směru průchodu řetězcových dat do log. 1\n\n CLD CLear Direction flag nuluje příznak směru průchodu řetězcových dat\n\n STI SeT Interrupt enable flag nastaví příznak povolení přerušení do log. 1\n\n CLI CLear Interrupt enable flag nuluje příznak povolení přerušení\n\n• Instrukce nepodmíněných skoků\n\n JMP [SHORT] návěští krátký relativní skok\n\n JMP návěští blízký relativní skok\n\n JMP reg16/mem16 blízký nepřímý absolutní skok\n\n JMP seg:off daleký absolutní skok\n\n JMP mem16:16 daleký nepřímý absolutní skok\n\n J[N]C Jump if [Not] Carry flag skok podmíněný stavem příznaku přenosu\n\n J[N]O Jump if [Not] Overflow flag skok podmíněný stavem příznaku přetečení\n\n J[N]S Jump if [Not] Sign flag skok podmíněný stavem příznaku znaménka (MSB)\n\n J[N]Z Jump if [Not] Zero flag skok podmíněný hodnotou nulového příznaku\n\n JCXZ Jump if CX is Zero\n\n JECXZ Jump if ECX skok podmíněný nulovou hodnotou registru CX nebo ECX (jedná se o dvě různé instruce)\n\n• Instrukce smyček\n\n LOOP návěští LOOP kombinace instrukcí DEC CX a JNZ (dekrementuje obsah registru (E)CX a dokud není nulový, skáče na návěští)\n\n LOOPE návěští LOOP while Equal\n\n LOOPZ návěští LOOP while Zero instrukce LOOP rozšířená o testování nulového příznaku\n\n LOOPNE návěští LOOP while Not Equal\n\n LOOPNZ návěští LOOP while Not Zero analogie k předchozí instrukci\n\n• Řetězcové instrukce\n\n MOVS MOVe data from String to string kopíruje zdrojová data na adresu cílových dat\n\n CMPS CoMPare String operands porovnává řetězcová data (provádí nedestruktivní rozdíl zdroj – cíl) a podle výsledků nastavuje příznaky\n\n SCAS SCAn String porovnává hodnotu cílových dat s hodnotou uloženou ve střádači (AL/AX/EAX)\n\n LODS LOaD String načte hodnotu z adresy zdrojových dat do střádače\n\n STOS STOre String uloží obsah střádače na adresu cílových dat\n\n INS INput from port to String přenese hodnotu z I/O portu adresovaného obsahem registru DX na adresu cílových dat\n\n OUTS OUTput String to port přenese hodnotu z adresy zdrojových dat na I/O port adresovaný obsahem registru DX','utf-8'),(1339,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n----\n\n==== REGISTRY ==== \n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n• Přenosové instrukce\n\n MOV cíl, zdroj MOVe zkopíruje obsah zdroje do cíle\n\n XCHG cíl, zdroj eXCHanGe zamění obsah zdroje a cíle\n\n LAHF Load Flags into AH register do AH uloží některé příznaky\n\n SAHF Load Flags from AH register z AH načte některé příznaky\n\n LEA cíl, zdroj Load Effective Address naplní cílový registr efektivní adresou zdrojového operandu\n\n CBW Convert Byte to Word\n\n CWD Convert Word to Doubleword\n\n CDQ Convert Doubleword to Quadword tato skupina instrukcí provádí znaménkové roztažení\n\n NOP No OPeration prázdná operace – provádí instrukci XCHG AX, AX\n\n• Instrukce zásobníku\n\n PUSH zdroj PUSH onto stack na vrchol zásobníku uloží obsah zdroje\n\n POP cíl POP a value from stack odebere hodnotu z vrcholu zásobníku, kterou uloží do cíle\n\n PUSHA PUSH All general-purpose registers onto stack uloží na zásobník (E)AX, (E)BX, (E)CX, (E)DX, původní (E)SP, (E)BP, (E)SI a (E)DI\n\n POPA POP All general-purpose registers from stack ze zásobníku obnoví registry uložené pomocí instrukce PUSHA\n\n PUSHF PUSH Flags register onto stack uloží na vrchol zásobníku příznakový registr\n\n POPF POP Flags register from stack výběr příznakového registru z vrcholu zásobníku\n\n• Instrukce binární aritmetiky\n\n INC cíl INCrement k cíli přičte 1, bez kontroly přetečení - nenastavuje CF!\n\n ADD cíl, zdroj integer ADD součet zdroje a cíle je uložen do cíle, je-li zdroj menší (8b zdroj a 16b cíl), před součtem se aplikuje znaménkové roztažení\n\n ADC cíl, zdroj ADd with Carry viz. ADD společně s připočtením obsahu CFk cíli\n\n DEC cíl DECrement od cíle odečte 1 - nenastavuje CF!\n\n SUB cíl, zdroj SUBtraction odečte zdroj od cíle a výsledek uloží do cíle\n\n SBB cíl, zdroj SuBtraction with Burrow viz. SUB se zohledněním hodnoty CF\n\n MUL zdroj unsigned MULtiplication bezznaménkové násobení zdroje se střádačem\n\n IMUL zdroj sIgned MULtiplication znaménkové násobení (viz. MUL)\n\n DIV zdroj unsigned DIVision bezznaménkové dělení střádače se zdrojem (o poloviční délce)\n\n 16b/8bAX / zdroj→celočíselný podíl do AL→zbytek do AH\n\n 32b/16bDX:AX / zdroj→celočíselný podíl do AX→zbytek do DX\n\n 64b/32bEDX:EAX / zdroj→celočíselný podíl do EAX→zb. do EDX\n\n IDIV zdroj sIgned DIVision znaménkové dělení (viz. DIV)\n\n NEG cíl two\'s complement NEGation if (cíl == 0) {CF = 0;} else {cíl = -cíl; CF = 1;}\n\n CMP cíl, zdroj CoMPare two operands provede nedestruktivní (výsledek zahodí, jen dle něj nastavuje příznaky) odečtení zdroje od cíle a tím je porovná\n\n• Logické instrukce\n\n AND cíl, zdroj AND logický součin\n\n OR cíl, zdroj OR logický součet\n\n XOR cíl, zdroj eXclussive OR nonekvivalence\n\n NOT cíl Negation of One complemenT logická negace cílového operandu\n\n TEST cíl, zdroj TEST of and nedestruktivní AND (nastaví příznaky, neukládá výsledek)\n \n• Instrukce posuvů a rotací\n\n SHL cil, [počet] SHift Left posune bity doleva o hodnotu operandu počet; zprava doplňuje nulami; bit s nejvyšší vahou (dále MSB) přesune do CF\n\n SHR cil, [počet] SHift Right posune bity doprava o hodnotu operandu počet; zleva doplňuje nulami; bit s nejnižší vahou (dále LSB) přesune do CF\n\n SAR cil, [počet] Shift Arithmetic Right posune bity doprava o hodnotu operandu počet; zleva doplňuje hodnotou z MSB; LSB přesouvá do CF\n\n ROL cil, počet ROtate Left rotuje bity v cíli zprava doleva; v každém kroku uloží MSB do CF\n\n ROR cil, počet ROtate Right rotuje bity v cíli zleva doprava; v každém kroku uloží LSB do CF\n\n RCL cil, počet Rotate trough Carry flag Left rotuje bity v cíli zprava doleva; CF se používá jako 9. (resp. 17.) bit cíle, čili MSB\n\n RCR cil, počet Rotate trough Carry flag Right rotuje bity v cíli zleva doprava; CF se k cíli „přimkne“ zprava (bere se jako LSB)\n\n• Instrukce ovládání příznaků\n\n STC SeT Carry flag nastavuje příznak přenosu do log. 1\n\n CLC CLear Carry flag nuluje příznak přenosu\n\n CMC CompleMent Carry flag negace příznaku přenosu\n\n STD SeT Direction flag nastaví příznak směru průchodu řetězcových dat do log. 1\n\n CLD CLear Direction flag nuluje příznak směru průchodu řetězcových dat\n\n STI SeT Interrupt enable flag nastaví příznak povolení přerušení do log. 1\n\n CLI CLear Interrupt enable flag nuluje příznak povolení přerušení\n\n• Instrukce nepodmíněných skoků\n\n JMP [SHORT] návěští krátký relativní skok\n\n JMP návěští blízký relativní skok\n\n JMP reg16/mem16 blízký nepřímý absolutní skok\n\n JMP seg:off daleký absolutní skok\n\n JMP mem16:16 daleký nepřímý absolutní skok\n\n J[N]C Jump if [Not] Carry flag skok podmíněný stavem příznaku přenosu\n\n J[N]O Jump if [Not] Overflow flag skok podmíněný stavem příznaku přetečení\n\n J[N]S Jump if [Not] Sign flag skok podmíněný stavem příznaku znaménka (MSB)\n\n J[N]Z Jump if [Not] Zero flag skok podmíněný hodnotou nulového příznaku\n\n JCXZ Jump if CX is Zero\n\n JECXZ Jump if ECX skok podmíněný nulovou hodnotou registru CX nebo ECX (jedná se o dvě různé instruce)\n\n• Instrukce smyček\n\n LOOP návěští LOOP kombinace instrukcí DEC CX a JNZ (dekrementuje obsah registru (E)CX a dokud není nulový, skáče na návěští)\n\n LOOPE návěští LOOP while Equal\n\n LOOPZ návěští LOOP while Zero instrukce LOOP rozšířená o testování nulového příznaku\n\n LOOPNE návěští LOOP while Not Equal\n\n LOOPNZ návěští LOOP while Not Zero analogie k předchozí instrukci\n\n• Řetězcové instrukce\n\n MOVS MOVe data from String to string kopíruje zdrojová data na adresu cílových dat\n\n CMPS CoMPare String operands porovnává řetězcová data (provádí nedestruktivní rozdíl zdroj – cíl) a podle výsledků nastavuje příznaky\n\n SCAS SCAn String porovnává hodnotu cílových dat s hodnotou uloženou ve střádači (AL/AX/EAX)\n\n LODS LOaD String načte hodnotu z adresy zdrojových dat do střádače\n\n STOS STOre String uloží obsah střádače na adresu cílových dat\n\n INS INput from port to String přenese hodnotu z I/O portu adresovaného obsahem registru DX na adresu cílových dat\n\n OUTS OUTput String to port přenese hodnotu z adresy zdrojových dat na I/O port adresovaný obsahem registru DX','utf-8'),(1340,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n----\n\n==== REGISTRY ==== \n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n[[Soubor:37_03.PNG]]\n\n[[Soubor:37_04.PNG]]','utf-8'),(1341,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n----\n\n==== REGISTRY ==== \n\n[[Soubor:37_01.PNG]]\n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n[[Soubor:37_03.PNG]]\n\n[[Soubor:37_04.PNG]]','utf-8'),(1342,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n[[Soubor:37_02.PNG]]\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n----\n\n==== REGISTRY ==== \n\n[[Soubor:37_01.PNG]]\n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n[[Soubor:37_03.PNG]]\n\n[[Soubor:37_04.PNG]]','utf-8'),(1343,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n[[Soubor:37_01.PNG]]\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n[[Soubor:37_02.PNG]]\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n----\n\n==== REGISTRY ==== \n\n[[Soubor:37_01.PNG]]\n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n[[Soubor:37_03.PNG]]\n\n[[Soubor:37_04.PNG]]','utf-8'),(1344,'== PRINCIP ČINNOSTI POČÍTAČE ==\n\n• Je to proces postupné transformace vstupních údajů na údaje výstupní, který je řízený posloupností příkazů předem vytvořeného (a do hlavní paměti počítače vloženého) programu. \n\n• V hlavní paměti jsou uloženy dva typy objektů - data, se kterými se pracuje a instrukce, které tuto práci (výpočet) řídí (oba tyto typy objektů představují kombinace různě velkých binárních čísel). \n\n====== INSTRUKCE ======\n\n• Jednotlivé příkazy programu. \n\n• Určují, jaké operace a s jakými operandy se budou provádět.\n\n• Obsahuje operační kód, který jednoznačně určuje operaci a délku instrukce, dále může obsahovat operandy nebo jejich adresy.\n\n• Úplný soubor všech instrukcí daného procesoru se nazývá STROJOVÝ KÓD/JAZYK a je pro různé počítače značně rozdílný.\n\n• Procesor za instrukci považuje (vždy) ten objekt, na který ukazuje registr ukazatele instrukcí.\n\n• Přenosové, aritmetické, logické, instrukce posuvů a rotací, skokové, řetězové, řídící.\n\n====== VÝPOČET ======\n\n1) Do instrukčního registru IR se uloží instrukce (obsah paměťového místa adresovaného registrem UKAZATELE INSTRUKCÍ IPR).\n\n2) Nastaví se nový obsah registru ukazatele instrukcí IPR (ukazuje na následující instrukci programu).\n\n3) Obsah INSTRUKČNÍHO REGISTRU IR je dekódován (určí se požadovaná operace a adresy příslušných operandů - operandy mohou být ve střádači A, ostatních registrech CPU, nebo v hlavní paměti).\n\n4) Provede se určená operace v ALU (u instrukcí skokových se nastaví nový obsah registru ukazatele instrukcí IPR). Výsledek operace se obvykle ukládá do střádače A, nebo do hlavní paměti.\n\n5) Pokud nebyla provedená instrukce pokynem k zastavení procesoru, pokračuje se znovu od bodu 1.\n\n----\n\n==== ZÁKLADNÍ BLOKOVÉ SCHÉMA ====\n\n[[Soubor:37_05.PNG]]\n\n1) Aritmeticko-logická jednotka (Arithmetic and Logic Unit, ALU)\n\n2) Řadič / řídící jednotka (Control Unit, CU)\n\n3) Zdroj taktovacích impulsů/hodin (clock)\n\n4) Registry (registers)\n\n5) Hlavní paměť (Memory Storage Unit / Main Memory)\n\n6) Vstupní/výstupní zařízení (Input/Output Devices, I/O Devices)\n\n• Podsystémy procesoru a počítače spolu komunikují pomocí:\n\n1) Adresové sběrnice (Address bus).\n\n2) Datové sběrnice (Data bus). \n\n3) Řídící sběrnice (Control bus).\n\n==== PROCESOR ====\n\n• ALU, CU, clock a registers tvoří základní jednotku (Central Processing Unit, CPU), které se zkráceně říká PROCESOR (Processor).\n\n• Významné registry CPU:\n\n1) Střádač (Accumulator, A).\n\n2) Registr ukazatele instrukcí (Instruction pointer register, IPR). \n\n3) Instrukční registr (Instruction register, IR).\n\n----\n\n==== JEDNOTKY ====\n\n• Nejmenší adresovatelnou jednotkou hlavní paměti je obvykle jedna slabika (Byte – „bajt“).\n \n1) k, kilo = 2^{10} Bytů\n\n2) M, Mega= 2^{20} Bytů\n\n3) G, Giga= 2^{30} Bytů\n\n4) T, Tera = 2^{40} Bytů\n\n5) P, Peta= 2^{50} Bytů\n\n6) E, Exa= 2^{60} Bytů\n\n7) Z, Zetta= 2^{70} Bytů\n\n8) Y, Yotta= 2^{80} Bytů\n\n---- \n\n== STROJOVÝ JAZYK A JSA ==\n\n• STROJOVÝ JAZYK/KÓD – takový jazyk, kterému rozumí počítač (stroj). Pro člověka velmi nesrozumitelný.\n\n==== JAZYK SYMBOLICKÝCH INSTRUKCÍ JSA ====\n\n• Symbolický jazyk, jazyk symbolických adres JSA, assembly language.\n\n• Nízkoúrovňový programovací jazyk, který je tvořen symbolickou reprezentací jednotlivých strojových instrukcí a konstant potřebných pro vytvoření strojového kódu programu pro daný procesor.\n\n• Jazyk nejnižší úrovně a je závislý na strojovém kódu procesoru. \n\n• Společným rysem drtivé většiny JSA je, že kódovou jednotkou je zde jeden řádek.\n\n• Program v JSA se skládá z:\n\n1) Překladových direktiv – dodatečné informace, ovlivňují způsob překladu (například pro jakou verzi procesoru se překládá, zda se ignorují velká a malá písmena, zda se generuje výpis a s jakým stránkováním, atp.). Také označují začátek a konec kódových sekcí.\n\n2) Strojových instrukcí - symbolicky zapsané strojové instrukce jsou při překladu nahrazeny odpovídajícím strojovým kódem.\n\n3) Definic obsahu paměti - můžeme inicializovat obsah paměti, nebo vyhradit v paměti místo pro proměnné.\n\n4) Návěstí - umožňují pojmenovat místa v paměti počítače. Návěstí umístěné před instrukcí se používá jako pro definici bodu v programu, na který můžeme skočit, návěstí umístěné před definicí obsahu paměti se používá při odkazování na tuto paměť.\n\n5) Maker - makra slouží pro nahrazení často používaných sekvencí instrukcí, umožňují zpřehlednit a zjednodušit kód vytvořením pseudoinstrukcí a formalizací často používaných konstrukcí.\n\n6) Podmínkových bloků - ty dovolují generovat odlišný kód v závislosti na nastavení překladových symbolů, což může být užitečné například při ladění, nebo u kódu určeného pro více platforem.\n\n7) Definic překladových symbolů - překladové symboly pomáhají při vytváření dobře strukturovaného kódu programu.\n\n----\n\n==== PŘEKLADAČ (ASSEMBLER) ====\n\n• Překlad programu zapsaného v symbolickém jazyku do strojového jazyka.\n\n• DIREKTIVY – dodatečné informace, které vyžaduje překladač. \n\n• Překladač musí procházet zdrojový text dvakrát. Při prvním průchodu kontroluje syntaktickou správnost symbolických instrukcí, vytváří tabulku použitých symbolů a přiřazuje těmto symbolům adresy, které reprezentují. Pokud je pak v tabulce symbolů přiřazena všem symbolům jedinečná adresa, provede v druhém průchodu vlastní překlad.\n\n• Každá rodina procesorů má svůj vlastní odlišný JSA, protože ve strojových instrukcích různých rodin procesorů a možnosti rozdělování a adresování paměti bývají zásadní rozdíly. Každá firma vyrábějící procesory si definuje vlastní pravidla pro JSA svých procesorů, z kterých mohou (ale také nemusejí) vycházet nezávislí autoři a firmy.\n\n----\n\n==== HYPOTETICKÝ POČÍTAČ ====\n\n[[Soubor:37_02.PNG]]\n\n• Obsahuje hlavní paměť s kapacitou 32 slabik a procesor, který má jediný registr - střádač, a který pracuje s jednoslabikovými instrukcemi následujícího formátu (obrázek výše).\n\n• Pro náš hypotetický počítač a následující jednoduché programy stačí definovat pouze čtyři direktivy:\n\n1) ORG adr - definice počáteční adresy programu\n\n2) END adr - označení konce programu a definice startovací adresy\n\n3) DEC number - definice dekadické konstanty\n\n4) RESB n - reservace n slabik paměti\n\n• Příklad: Program pro příkaz: if (A >= B) C = A; else C = B; (tj. Pro příkaz C = max(A, B);), čísla A a B jsou čísla se znaménky:\n\n ORG 5 ; začátek programu v paměti\n\n START: LOAD A ; A do střádače\n\n JN ANEG ; je-li záporné, tak skok na ANEG\n\n LOAD B ; A je kladné, tak B do střádače\n\n JN THEN ; je-li B záporné, tak A je větší\n\n JMP TEST ; obě jsou kladná, nutný test\n\n ANEG: LOAD B ; A je záporné, B do střádače\n\n JN TEST ; obě jsou záporná, nutný test\n\n JMP ELSE ; B je kladné a proto je větší\n\n TEST: NEG ; ve střádači je B ⇒ -B\n\n ADD A ; ve střádači je A-B\n\n JN ELSE ; je-li (A-B)< 0, tak B je větší\n\n THEN: LOAD A ; A je větší, tak A do střádače\n\n SAVE C ; A ze střádače do C\n\n HALT ; konec výpočtu\n\n ELSE: LOAD B ; B je větší, tak B do střádače\n\n SAVE C ; B ze střádače do C\n\n HALT ; konec výpočtu\n\n A DEC 56 ; definice hodnoty A (zvoleno 56)\n\n B DEC -11 ; definice hodnoty B (zvoleno -11)\n\n C RESB 1 ; rezervování místa pro výsledek\n\n END START ; konec programu s uvedením startu\n\n• Symboly uvedené vlevo před symbolickou instrukcí/direktivou se nazývají návěští/jména a reprezentují adresu této instrukce nebo adresu konstanty definované direktivou. Návěští se formálně odlišuje od jména tím, že je zakončeno dvojtečkou \n\n• Překlad – první průchod (vytvoření tabulky symbolů):\n\n• Symbol Adresa\n\n START 5 00101\n\n A 22 10110\n\n ANEG 10 01010\n\n B 23 10111\n\n THEN 16 10000\n\n TEST 13 01101\n\n ELSE 19 10011\n\n C 24 11000\n\n• Překlad – druhý průchod (vlastní překlad) \n\n• (Program v symbolickém jazyku (první dva sloupce), překlad do strojového jazyka (druhé dva sloupce) - adresa paměti a obsah paměti.):\n\n ORG 5\n\n START: LOAD A 00101 00110110\n\n JN ANEG 00110 11001010\n\n LOAD B 00111 00110111\n\n JN THEN 01000 11010000\n\n JMP TEST 01001 10101101\n\n ANEG: LOAD B 01010 00110111\n\n JN TEST 01011 11001101\n\n JMP ELSE 01100 10110011\n\n TEST: NEG 01101 100xxxxx\n\n ADD A 01110 01010110\n\n JN ELSE 01111 11010011\n\n THEN: LOAD A 10000 00110110\n\n SAVE C 10001 01111000\n\n HALT 10010 111xxxxx\n\n ELSE: LOAD B 10011 00110111\n\n SAVE C 10100 01111000\n\n HALT 10101 111xxxxx\n\n A DEC 56 10110 00111000\n\n B DEC -11 10111 11110101\n\n C RESB 1 11000 xxxxxxxx\n\n END START\n\n----\n\n==== REGISTRY ==== \n\n[[Soubor:37_01.PNG]]\n\n• Registry procesoru jsou paměťová místa umístěná na čipu procesoru. Od procesoru 80386 jsou všechny registry (kromě segmentových) rozšířeny z původních 16b na 32b. Tyto „rozšířené“ registry poznáme podle toho, že jejich název je rošířen o E (z angl. Extended).\nGPR (GENERAL PURPOSE REGISTERS)\n\n• Registry obecného použití; dělí se na dvě 8b části.\n\n• (E)AX (Accumulator) – střadač\n\n• (E)BX (Base register) – používá se pro přístup k datům v datovém segmentu\n\n• (E)CX (Counter register) – čítač (řídicí proměnná pro cykly, bitové posuvy, ...)\n\n• (E)DX (Data register) – zvláštní účel při ukládání částí výsledků operací MUL/DIV (celočíselného násobení a dělení)\n\n====== INDEXOVÉ A UKAZATELOVÉ REGISTRY ======\n\n• (E)SP (Stack Pointer) – ukazatel na vrchol zásobníku (adresa SS:(E)SP )\n\n• (E)BP (Base Pointer) – využívá se pro přístup k datům uloženým na zásobníku (lokální proměnné a argumenty podprogramu)\n\n• (E)SI (Source Index)\n\n• (E)DI (Destination Index) – oba indexregistry se využívají při práci s řetězcovými instrukcemi a při výpočtu efektivní adresy\n\n• (E)IP (Instruction Pointer) – ukazuje do kódového segmentu paměti na následující vykonávanou instrukci (na adresu CS:(E)IP)\n\n====== SEGMENTOVÉ REGISTRY ======\n\n• CS (Code Segment) - kódový segment - obsahuje instrukce programu\n\n• SS (Stack Segment) - zásobníkový segment \n\n• DS (Data Segment), ES (Extra data Segment), FS a GS - datové segmenty\n \n====== (E)FLAGS – PŘÍZNAKOVÝ REGISTR PROCESORU ======\n\n• IF (Interrupt enable Flag) – povoluje přerušení\n\n• OF (Overflow Flag) – přetečení aritmetické operace ALU\n\n• DF (Direction Flag) – udává směr průchodu při práci s řetězcovými instrukcemi\n\n• SF (Sign Flag) – nastaven při záporném výsledku\n\n• ZF (Zero Flag) – je-li výsledek roven 0, pak je nastaven\n\n• AF (Auxiliary carry Flag) – nastavuje se podle přenosu ze spodního nibblu (nibble = polovina bytu) …\n\n• PF (odd Parity Flag) – nastaven při sudém (slov. párném) počtu bitů v log. 1\n\n• CF (Carry Flag) – příznak přenosu (při přenosu mimo rozsah operand)\n\n----\n\n==== ZÁKLADNÍ INSTRUKČNÍ SADA X86 ====\n\n[[Soubor:37_03.PNG]]\n\n[[Soubor:37_04.PNG]]','utf-8'),(1345,'','utf-8'),(1346,'','utf-8'),(1347,'','utf-8'),(1348,'','utf-8'),(1349,'','utf-8'),(1350,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 17, 09, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17(1%) (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1351,'','utf-8'),(1352,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\n[[Soubor:Boyer_moor.png]]\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce <m>O</m>\n\nOmega - dolní hranice, minimální rychlost růstu funkce <m>Omega</m>\n\nTheta - oznažuje třídu časového chování algoritmu <m> Theta </m>\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(1353,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 17, 09, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17(1%) (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1354,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 28\n## 00011100\n# x = -28\n## 11100011\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----\n\n====Pohyblivá řádová čárka====\nNazývá se také \'\'\'floating point\'\'\'.\n\n<m>X = (-1)^S.M.B^E</m>\n\n# \'\'\'S\'\'\' je \'\'\'hodnota znaménkového bitu\'\'\'. Pokud má hodnotu 0, číslo je kladné.\n# \'\'\'M\'\'\' je \'\'\'mantisa\'\'\'. Ta je desetinnou částí tohoto čísla. Je v přímém kódu.\n# \'\'\'B\'\'\' je \'\'\'základ číselné soustavy\'\'\'. Pokud se jedná o dvojkovou soustavu, jeho hodnota bude 2.\n# \'\'\'E\'\'\' je \'\'\'exponent\'\'\'. Jedná se o celé číslo, které ná zvyšovat řád kokrétního čísla v soustavě (např. 1x10^3).\n\nČíslo je v počítači uložené jako:\n\n|S|EEEEEEEE|MMMMMMMMMMMMMMMMMMMMMMM|\n\nKonkrétní příklad je podle standardu IEEE754, ale hlavní myšlenkou je jeden znaménkový bit, přesně vyhrazený počet bitů pro exponent a pro mantisu. \n\n\'\'\'Mantisa\'\'\' - obecně se jedná o desetinný základ čísla s plovoucí řádovou čárkou. Desetinná čárka tohoto čísla se dává mezi první a druhou číslici (tím pádem se v desítkové soustavě jedná o desetinné číslo nepřesahující 10, a celá čáast nabývá hodnot 0-9. V binární soustavě ale celá část může nabývat hodnot jen 0 a 1). Bity vyhrazené pro mantisu však ukládají pouze její desetinnou část (M). Pokud exponent bude rovný nule, jedná se o číslo menší než jedna a mantisa bude 0,M. V opačném případě to bude 1,M. Tím pádem mantisa nepřekračuje hodnotu 2.\n\n\nPokud chceme zakódovat číslo, např. -10,8, tak ho vydělíme nejbližší menší mocninou dvojky. V tomto případě je to číslo 8, tedy 2^3. Zůstane nám číslo 1,35. A těch \"35\" se zakóduje do bitů mantisy jako desetinné číslo (jiný převod). Proto ta čísla nejednou nejsou úplně přesná. pokud máme 4 bity exponentu a 8 bitů mantisy, výsledné číslo bude vypadat takhle:\n\n\'\'\'1 1000 00100011\'\'\'\n\n\'\'\'Speciální stavy:\'\'\'\n# E=0, M=0 --> X=0\n# E=max, M=0 --> X = nekonečno\n# E=max, M<>0 --> X = NaN - not a number','utf-8'),(1355,'','utf-8'),(1356,'','utf-8'),(1357,'','utf-8'),(1358,'','utf-8'),(1359,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici.\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu===\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]','utf-8'),(1360,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici.\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]','utf-8'),(1361,'','utf-8'),(1362,'','utf-8'),(1363,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici.\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]','utf-8'),(1364,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]','utf-8'),(1365,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 28\n## 00011100\n# x = -28\n## 11100011\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----\n\n====Pohyblivá řádová čárka====\nNazývá se také \'\'\'floating point\'\'\'.\n\n<m>X = (-1)^S.M.B^E</m>\n\n# \'\'\'S\'\'\' je \'\'\'hodnota znaménkového bitu\'\'\'. Pokud má hodnotu 0, číslo je kladné.\n# \'\'\'M\'\'\' je \'\'\'mantisa\'\'\'. Ta je desetinnou částí tohoto čísla. Je v přímém kódu.\n# \'\'\'B\'\'\' je \'\'\'základ číselné soustavy\'\'\'. Pokud se jedná o dvojkovou soustavu, jeho hodnota bude 2.\n# \'\'\'E\'\'\' je \'\'\'exponent\'\'\'. Jedná se o celé číslo, které ná zvyšovat řád kokrétního čísla v soustavě (např. 1x10^3).\n\nČíslo je v počítači uložené jako:\n\n|S|EEEEEEEE|MMMMMMMMMMMMMMMMMMMMMMM|\n\nKonkrétní příklad je podle standardu IEEE754, ale hlavní myšlenkou je jeden znaménkový bit, přesně vyhrazený počet bitů pro exponent a pro mantisu. \n\n\'\'\'Mantisa\'\'\' - obecně se jedná o desetinný základ čísla s plovoucí řádovou čárkou. Desetinná čárka tohoto čísla se dává mezi první a druhou číslici (tím pádem se v desítkové soustavě jedná o desetinné číslo nepřesahující 10, a celá čáast nabývá hodnot 0-9. V binární soustavě ale celá část může nabývat hodnot jen 0 a 1). Bity vyhrazené pro mantisu však ukládají pouze její desetinnou část (M). Pokud exponent bude rovný nule, jedná se o číslo menší než jedna a mantisa bude 0,M. V opačném případě to bude 1,M. Tím pádem mantisa nepřekračuje hodnotu 2.\n\n\nPokud chceme zakódovat číslo, např. -10,8, tak ho vydělíme nejbližší menší mocninou dvojky. V tomto případě je to číslo 8, tedy 2^3. Zůstane nám číslo 1,35. A těch \"35\" se zakóduje do bitů mantisy jako desetinné číslo (jiný převod). Proto ta čísla nejednou nejsou úplně přesná. pokud máme 4 bity exponentu a 8 bitů mantisy, výsledné číslo bude vypadat takhle:\n\n\'\'\'1 1000 00100011\'\'\'\n\n\'\'\'Speciální stavy:\'\'\'\n# E=0, M=0 --> X=0\n# E=max, M=0 --> X = nekonečno\n# E=max, M<>0 --> X = NaN - not a number\n\n======IEEE754======\nUkládá binární čísla v plovoucí desetinné čárce na 32 bitech (jednoduchá přesnost) nebo 64 bitech (dvojitá přesnost). Dané číslo je rozděleno na mantisu a exponent. Nejlevější bit je vždy znaménkový, následuje 8 bitů pro exponent a zbylých 23 je mantisa. Na 64 bitech je rozdělení 1, 11, 52.','utf-8'),(1366,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n======BCD kód======\nKód, který se používá pro reprezentaci desítkových čísel. Desítková číslice je zakódovaná na 4 bitech, přičemž tato čtveřice může nabývat hodnot 0-9.\n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 28\n## 00011100\n# x = -28\n## 11100011\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----\n\n====Pohyblivá řádová čárka====\nNazývá se také \'\'\'floating point\'\'\'.\n\n<m>X = (-1)^S.M.B^E</m>\n\n# \'\'\'S\'\'\' je \'\'\'hodnota znaménkového bitu\'\'\'. Pokud má hodnotu 0, číslo je kladné.\n# \'\'\'M\'\'\' je \'\'\'mantisa\'\'\'. Ta je desetinnou částí tohoto čísla. Je v přímém kódu.\n# \'\'\'B\'\'\' je \'\'\'základ číselné soustavy\'\'\'. Pokud se jedná o dvojkovou soustavu, jeho hodnota bude 2.\n# \'\'\'E\'\'\' je \'\'\'exponent\'\'\'. Jedná se o celé číslo, které ná zvyšovat řád kokrétního čísla v soustavě (např. 1x10^3).\n\nČíslo je v počítači uložené jako:\n\n|S|EEEEEEEE|MMMMMMMMMMMMMMMMMMMMMMM|\n\nKonkrétní příklad je podle standardu IEEE754, ale hlavní myšlenkou je jeden znaménkový bit, přesně vyhrazený počet bitů pro exponent a pro mantisu. \n\n\'\'\'Mantisa\'\'\' - obecně se jedná o desetinný základ čísla s plovoucí řádovou čárkou. Desetinná čárka tohoto čísla se dává mezi první a druhou číslici (tím pádem se v desítkové soustavě jedná o desetinné číslo nepřesahující 10, a celá čáast nabývá hodnot 0-9. V binární soustavě ale celá část může nabývat hodnot jen 0 a 1). Bity vyhrazené pro mantisu však ukládají pouze její desetinnou část (M). Pokud exponent bude rovný nule, jedná se o číslo menší než jedna a mantisa bude 0,M. V opačném případě to bude 1,M. Tím pádem mantisa nepřekračuje hodnotu 2.\n\n\nPokud chceme zakódovat číslo, např. -10,8, tak ho vydělíme nejbližší menší mocninou dvojky. V tomto případě je to číslo 8, tedy 2^3. Zůstane nám číslo 1,35. A těch \"35\" se zakóduje do bitů mantisy jako desetinné číslo (jiný převod). Proto ta čísla nejednou nejsou úplně přesná. pokud máme 4 bity exponentu a 8 bitů mantisy, výsledné číslo bude vypadat takhle:\n\n\'\'\'1 1000 00100011\'\'\'\n\n\'\'\'Speciální stavy:\'\'\'\n# E=0, M=0 --> X=0\n# E=max, M=0 --> X = nekonečno\n# E=max, M<>0 --> X = NaN - not a number\n\n======IEEE754======\nUkládá binární čísla v plovoucí desetinné čárce na 32 bitech (jednoduchá přesnost) nebo 64 bitech (dvojitá přesnost). Dané číslo je rozděleno na mantisu a exponent. Nejlevější bit je vždy znaménkový, následuje 8 bitů pro exponent a zbylých 23 je mantisa. Na 64 bitech je rozdělení 1, 11, 52.','utf-8'),(1367,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]','utf-8'),(1368,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=','utf-8'),(1369,'','utf-8'),(1370,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===L\'Hospitalovo pravidlo===','utf-8'),(1371,'','utf-8'),(1372,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===L\'Hospitalovo pravidlo===','utf-8'),(1373,'','utf-8'),(1374,'','utf-8'),(1375,'','utf-8'),(1376,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]','utf-8'),(1377,'','utf-8'),(1378,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]','utf-8'),(1379,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==','utf-8'),(1380,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n\n=Integrální počet=','utf-8'),(1381,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 17, 09, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17(50%) (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1382,'','utf-8'),(1383,'','utf-8'),(1384,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n=Integrální počet=','utf-8'),(1385,'','utf-8'),(1386,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n==Taylerův polynom==\n[[Soubor:Taylor.png]]\n\n=Integrální počet=','utf-8'),(1387,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 17, 09, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17(60%) (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1388,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n=Integrální počet=','utf-8'),(1389,'=Umělá inteligence=\n\nToto téma spadá pod pojem umělá inteligence, což je pojem, který se špatně definuje už jen z důvodu, že není obecně přijata žádná definice pro pojem inteligence. Umělá inteligence se snaží napodobit přirozenou inteligenci. \n\nUmělá inteligence je také pojem využívaný pro označení vědní disciplíny.\n\nDefinice:\n\n#Umělá inteligence je vlastnost uměle vytvořeného systému, který má schopnost rozpoznávat předměty a jevy, analyzovat vztahy mezi nimi a tak si vytvářet modely světa, dělat účelná rozhodnutí a předvídat jejich důsledky, řešit problémy včetně objevování nových zákonitostí a zdokonalování své činnosti [Z. Kotek a kol., 1986].\n\n#Umělá inteligence je modelování intelektuální činnosti člověka počítačem při řešení složitých úloh, kde postup vyžaduje schopnost výběru z mnoha nebo z nezřetelně popsaných variant; též samočinné rozpoznávání tvarů nebo předmětů, usuzování z jednoho výroku na jiný, vytváření analogií mezi jednotlivými úsudky, generování a ověřování hypotéz, tvorba a uplatnění znalostí na základě přijatých vstupních dat a informací, schopnost eliminovat nepříznivé reakce na podněty z okolí a usměrňovat činnost systému v probíhajících procesech s ohledem na měnící se a často nezřetelné vnější podmínky [Všeobecná encyklopedie DIDEROT, 1999].\n\n==Úlohy==\n\n\'\'\'Klasická úloha:\'\'\' je definována počátečním stavem (S - Start), množinou cílových stavů (G - Goals) a množinou operátorů, které umožňují měnit stavy úlohy.\n\n\'\'\'Řešení úlohy:\'\'\' je nalezení posloupnosti operátorů, jejichž aplikací se dostaneme z počátečního stavu do některého z množiny cílových stavů.\n\nKe každé úloze náleží \'\'\'stavový prostor\'\'\', který prohledáváme a ten se skládá z dvojice (S,O), kde S je množina stavů a O množina operátorů, které umožňují přechody mezi nimi.\n\n\n\'\'\'Kritéria pro hodnocení metod řešení úloh\'\'\'\n#Úplnost (zda metoda nalezne řešení vždy pokud existuje)\n#Optimálnost\n#Časová náročnost\n#Paměťová náročnost (zda nalezne nejlepší řešení)\n\n=Metody řešení úloh založené na prohledávání stavového prostoru=\nStavový prostor vypadá jako orientovaný graf/strom. Definovaný dvojici (S,O). S je množina všech stavů a O je množina všech operátorů, kterými lze stavy úlohy měnit.\n\nHrany stromu označují přechody a uzly stavy.\n\nVypadá například takto:\n\n[[Soubor:Stavovyprostor.png]]\n\nTěmito metodami můžeme řešit úlohy jako jsou:\n\n#Úloha dvou džbánů\n#Hlavolam 8 (přesouvání 8 kostiček na 9-místné ploše)\n#Úloha N dam (N dam na šachovnici NxN, tak aby žádná neohrožovala jinou)\n#Nalezení nejkratší cesty\n#Úloha obchodního cestujícího\n\n==Neinformované==\nTyto metody nemají k dispozici žádnou informaci o cílovém stavu ani žádné prostředky jak aktuální stavy hodnotit.\n\n[[Soubor:Narocnosti.png]]\n===Prohledávání do šířky (BFS - Breadth First Search)===\nZkoumání stromu po patrech, dosaženo tím, že OPEN jen fronta.\n 1. Sestroj frontu OPEN a seznam CLOSED. Do fronty OPEN umísti počáteční uzel.\n 2. Jeli fronta OPEN prázná, úloha nemá řešení. \n Ukonči prohledávání jako neúspěšné jinak pokračuj.\n 3. Vyber z čela fronty uzel a umísti ho do seznamu CLOSED. \n Jeli tento vybraný uzel cílový ukonči prohledávání jako úspěšné \n a vrať cestu od kořenového uzlu k cílovému. \n Jinak pokračuj.\n 4. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n který nejsou ani v seznamu CLOSED ani ve frontě OPEN, \n vlož do fronty OPEN a vrať se na bod 2.\n\nNěkde je rozepsáno na 5 bodů (3. bod je rozdělený po první větě).\n\n===Prohledávání do hloubky (DFS - Depth First Search)===\nDíky tomu, ze OPEN je zásobník. Prochází vždy nejpravější podstrom, ale dá se to změnit pořadím operátorů.\n\nLze zavést taky seznam CLOSED, ale metoda pak ztrácí sovou lineární paměťovou náročnost a získává exponenciální.\n\nNení úplný ani optimální. Exponenciální časová náročnost.\n\nJejí úplně základní provedení je nepoužitelné, proto uvádíme až modifikaci (například testovaní jestli uzly nejsou předci).\n\n 1. Vytvoř zásobník OPEN.\n Do zásobníku OPEN vlož kořen.\n 2. Jeli zásobník prázdný, pak úloha nemá řešení a proto ukonči prohledávání\n jako neúspěšné. Jinak pokračuj.\n 3. Vyber ze zásobníku první uzel. Jeli vybraný uzel cílovým,\n ukonči vyhledávání jako úspěšné a vrať cestu od kořenového uzlu k cílovému.\n Jinak pokračuj.\n 4. Vybraný uzel expanduj. Do zásobníku OPEN umísti všechny jeho \n bezprostřední následovníky, kteří v tomto zásobníku ještě nejsou, \n a kteří nejsou předky generovaného uzlu.\n\n===Omezené prohledávání do hloubky (DLS - Depth Limited Search)===\nFunguje stejně jako DFS jen se modifikuje poslední krok, kde se kontroluje a nastavuje hloubka.\n\n 4. Jeli hloubka vybraného uzlu menší než zvolení maximální hloubka,\n tak tento uzel expanduj......\n\n===Postupného zanořování do hloubky (DIS - Iterative Deepening DFS)===\nV cyklu volá metodu DLS. Postupně zvyšuje hloubku.\n\n 1. Zadej maximální hloubku.\n 2. Nastav aktuální hloubku na 1.\n 3. Volej DLS s omezením na aktuální hloubku. Skončí li volané DLS s úspěchem. \n Ukonči testování úspěšně a vrať cestu nalezenou procedurou.\n 4. Inkrementuj aktuální hloubku.\n 5. Pokud je nová aktuální hloubka větší než maximální, ukonči neúspěchem. \n Jinak pokračuj na bod 3.\n\n===Obousměrné prohledávání (BS Bidirectional)===\nZačíná dvě prohledávání od kořene a od cíle, některou z jiných metod. Čeká se na setkání 2 cest.\n\n===Zpětné navracení (Backtracking)===\nModifikace DFS. Místo všech následovníku se generuje pouze jeden a další až při případných návratech. \n\nExtrémně nízká paměťová náročnost (jen jedna věc v zásobníku).\n\nExponenciální časová náročnost.\n\nNeúplná.\n\nNeoptimální.\n\n 1. Sestroj zásobník OPEN. Umísti do něj počáteční uzel.\n 2. Jeli Open prázdný .... bla bla bla\n 3. Jde li na uzel na vršku zásobníku aplikovat první/další operátor, \n tak tento operátor aplikuj a pokračuj.\n Jinak tento uzel odstraň a vrať se na bod 2.\n 4. Jeli vzniklý uzel uzlem cílovým .....\n Jinak ulož vygenerovaný uzel na vršek zásobníku a pokračuj bodem 2.\n\n===Metoda stejných cen (UCS - Uniform Cost Search)===\n\n 1. Vytvoř dva seznamy: OPEN a CLOSED.\n DO OPEN umísti počáteční uzel.\n 2. jeli prazdny .....\n 3. Vyber ze seznamu OPEN uzel s nejlepším ohodnocením\n a umísti ho do CLOSED.\n 4. Jeli cilovy ....\n 5. Vybraný uzel expanduj a jeho bezprostřední následovníky, \n kteří nejsou ani v OPEN ani v CLOSED umísti do OPEN.\n Z uzlů, které jsou v seznamu vícekrát vyber pouze ten\n s nejlepším ohodnocením, ostatní vyškrtni. Pokračuj na bod 2.\n\n==Informované==\nMají k dispozici a používají nějakou informaci o koncovém stavu.\n\nMají prostředky jak hodnotit aktuální stavy.\n\nJsou podobné metodám, které používá člověk (ví, kterým směrem vyrazit).\n===Metody Best first search===\nZákladní a největší skupina informovaných metod.\n\nVybírají nejlépe hodnocený stav.\n\nAlgoritmus je podobný metodě UCS jen se vybírá podle jiné (lepší) informace. Není to jen hodnota součtu přechodů od kořene k danému uzlu, ale tato funkce má i odhad cesty k cíli.\n\n<m>f(n) = g(n) + h(n) </m>\n\nH je heuristická funkce - odhad. Čím je přesnější tím menší ku stavového prostoru je potřeba prohledat. (extrém je když je přesná a jen jdeme a nehledáme).\n\nVšechny ceny přechodů musí být kladné a g(s_n+1) > g(s_n). \n\nU UCS je složka heuristiky pořád nulová. \n\nOpačný extrém je greedy search, kde je nulová g(n).\n\n\n====Greedy Search====\nNeúplná, neoptimální, paměťově exponenciálně náročná. \nČasová náročnost ovlivněna heuristickou funkcí.\n\nŘídí se podle nejoptimálnější heuristiky.\n\n====A* Search====\nČíst A Stár.\n\nNejdůležitější a nejpoužívanější metoda.\n\nPoužívá f(n) jako součet cesty od začátku a heuristiky.\n\nHeuristika musí být spodní odhad skutečné ceny cesty od daného uzlu k cíli. Taková heuristika se nazývá přístupovou heuristikou.\n\nJe úplná.\n\nPro přípustné heuristické funkce je optimální.\n\n===Metody lokálního prohledávání===\n\nJsou takové metody, u kterých nezáleží na cestě, ale pouze na nalezeném ideálním konci.\n\nMají zcela zanedbatelnou paměťovou náročnost, protože si nemusí pamatovat cesty.\n\nUmějí dospět k řešením v rozsáhlých, dokonce i spojitých což výše popsané neumí.\n\n====Hill-Climbing====\nPoužívá pouze heuristiku.\n\nUzlu je přiřazena hodnota podle toho jak dobrou cestu nabízí (jak optimální). Vybírá se pak nejvyšší hodnota - proto lezení do kopce.\n\n 1. Vytvoř uzel Current, který je totožný s počátečním stavem.\n 2. Expanduj uzel Current ohodnoť jeho následovníky \n a nejlépe ohodnocený označ za Next.\n 3. Jeli ohodnocení Current lepší než ohodnocení Next, ukonči.\n 4. Ulož Next do Current a pokračuj na bod 2.\n\n====Simulované žíhání (Simulated Annealing)====\nJe stochastické (neurčité, nahodilé).\n\nJe k překonání lokálních extrémů, které často vedou k neúspěchu metody Hill-climbing.\n\nJe podle metody žíhání kovů a používá stejnou terminologii.\n\nJe podobná hill climbing, ale počítá si kroky, podle kterých hledá teplotu v tabulce, a uzel Next vybere náhodně. Když má dojít k ponechání uzlu Current tak má expo. pravděpodobnost, že ho stejně vymění.\n\n[[Soubor:Zihani.png]]\n\n=Metody řešení úloh s omezujícími podmínkami=\nJe nutno zkoumat i vnitřní strukturu stavů.\n\n(úlohy N dam, rozmístění prvků na čip, obarvování map)\n\nBacktracking for CSP\n\nForward Checking\n\nMetoda Min-conflict\n\n=Metody založené na rozkladu úloh na podproblémy=\n\nPři rozkladu na podúlohy se využívá AND/OR grafů.\n\n[[Soubor:Andor.png]]\n\nv pořadí AND, OR.\n\n==AO algoritmus==\n\nŘešení hanojských věží.\n\n[[Soubor:AO.png]]\n\nMá i informovanou variantu AO*.\n\n[[Soubor:AOinf.png]]\n\n=Metody hraní her=\n\nHraní her – dva pravidelně se střídající hráči, každý z nich chce vyhrát.\n\n1. Jednoduché hry – lze prozkoumat/vyšetřit všechny možné tahy (NIM)\n\n2. Složité ́hry– zkoumá se pouze několik na ́sledujících tahů (Šachy)\n\n3. Hry s neurčitostí(Vrhcáby)\n\n==MiniMax==\n//cite Kalab\n\nJelikož nemáme cílové stavy, je potřeba určit si maximální hloubku stromu. Poté koncové listy tohoto stromu ohodnotíme. Čím vyšší hodnocení, tím lepší stav pro hráče na tahu, čím nižší, tím lepší stav pro oponenta. Při použití CHARu je rozsah 256 hodnot. Maximální hodnota, 127, znamená vítězný tah, minimální hodnota, -127, znamená úplnou prohru.\n\nDva důležité kroky, které je potřeba provést, je výběr všech tahů, které vůbec dávají smysl (například u piškvorek, u hada je tahů tak málo, že se volí všechny) a hlavně zvolení správné heuristické funkce, která bude hodnotit stav po jednotlivých tazích. U tic-tac-toe (piškvorky 3×3) je třeba vhodná heuristika počet trojic, kterými může soupeř zvítězit.\n\nPo ohodnocení listů procházíme strom stejně jako algoritmus DFS. U každého našeho tahu vybíráme z možných hodnot tu nejvyšší, u soupeřova tu nejnižší. Projdeme celý strom, čímž ohodnotíme kořenový uzel. To nám poradí, který tah máme tedy udělat – je to ten, který vede k uzlu se stejnou hodnotou, jako má kořenový uzel.\n\n==Alfa Beta==\nJde o vylepšenou verzi MiniMaxu, která eliminuje procházení větví, u kterých je jasné, že se nestanou. V těchto případech je totiž pro hráče na tahu vždy výhodnější vydat se jinou cestou. \n\nNa začátku alfabety si vytvoříme 2 proměnné: alfa a beta a přiřadíme je kořenovému uzlu. Alfa má hodnotu nejnižší možnou, beta nejvyšší možnou. Pokud v procházení grafu postupujeme směrem dolů, opisujeme alfa a beta do spodního uzlu. Pokud postupujeme směrem nahoru, tak:\n\njestliže jde o náš tah a hodnota beta na listu je vyšší, než hodnota alfa rodičovského prvku, alfu touto betou nahradíme.\njestliže jde o soupeřův tah a hodnota alfa na listu je nižší, než hodnota beta rodičovského prvku, betu touto alfou nahradíme.\nPokud jde o koncový uzel, tak bereme místo alfy/bety jeho ohodnocení.\n\nOptimalizace spočívá v tom, že když se stane, že je alfa větší než beta, můžeme tuto větev opustit a zbylé uzly nekontrolovat. Algoritmus je složité vysvětlit, ale jednoduché pochopit podle ukázky.\n\nhttp://www.ocf.berkeley.edu/~yosenl/extras/alphabeta/alphabeta.html java applet na konci.','utf-8'),(1390,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 27\n\nNeprepsano:\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n18, 24, 27\n\nZoufalstvi:\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1391,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 27\n\nNeprepsano:\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n18, 24, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1392,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 27\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n18, 24, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1393,'','utf-8'),(1394,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n==Globální==\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n=Integrální počet=','utf-8'),(1395,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n=Integrální počet=','utf-8'),(1396,'','utf-8'),(1397,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=','utf-8'),(1398,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=','utf-8'),(1399,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n==Neurčitý integrál==\n\n==Určitý integrál==','utf-8'),(1400,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n==Neurčitý integrál==\n\n==Určitý integrál==','utf-8'),(1401,'','utf-8'),(1402,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n\n===Substituce===\n\n\n==Určitý integrál==','utf-8'),(1403,'','utf-8'),(1404,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==','utf-8'),(1405,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==','utf-8'),(1406,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes','utf-8'),(1407,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=','utf-8'),(1408,'','utf-8'),(1409,'','utf-8'),(1410,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\n==Parciální derivace==\n\n[[Soubor:Parcialniderivace.png]]','utf-8'),(1411,'','utf-8'),(1412,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor grad [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\n==Parciální derivace==\n\n[[Soubor:Parcialniderivace.png]]','utf-8'),(1413,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\n==Parciální derivace==\n\n[[Soubor:Parcialniderivace.png]]','utf-8'),(1414,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\n==Derivace==\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\n===Parciální derivace===\n\n[[Soubor:Parcialniderivace.png]]\n\n==Integrál==','utf-8'),(1415,'','utf-8'),(1416,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\nShrnutí\n\n[[Soubor:Shrnutifcevice.png]]\n\n==Derivace==\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\n===Parciální derivace===\n\n[[Soubor:Parcialniderivace.png]]\n\n==Integrál==','utf-8'),(1417,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\nShrnutí\n\n[[Soubor:Shrnutifcevice.png]]\n\n==Derivace==\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\nSměrová derivace je to tehdy pokud je vektor jednotkový.\n\n===Parciální derivace===\n\n[[Soubor:Parcialniderivace.png]]\n\n==Integrál==','utf-8'),(1418,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\nShrnutí\n\n[[Soubor:Shrnutifcevice.png]]\n\n==Derivace==\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\nSměrová derivace je to tehdy pokud je vektor jednotkový.\n\nPro vyšší řády se opět dá použít Taylorův polynom.\n\n===Parciální derivace===\n\n[[Soubor:Parcialniderivace.png]]\n\n==Integrál==','utf-8'),(1419,'','utf-8'),(1420,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\nShrnutí\n\n[[Soubor:Shrnutifcevice.png]]\n\n==Derivace==\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\n[[Soubor:Extrenyvice.png]]\n\nSměrová derivace je to tehdy pokud je vektor jednotkový.\n\nPro vyšší řády se opět dá použít Taylorův polynom.\n\n===Parciální derivace===\n\n[[Soubor:Parcialniderivace.png]]\n\n==Integrál==','utf-8'),(1421,'','utf-8'),(1422,'','utf-8'),(1423,'=Úvod=\n//\'\'\'\'\'Pirozek ma krasne shnute skripta, takze ho budu screenovat, protoze si uz moc otukavam klavesnici. A kdyz neocreenuju Pirozka screenuju Krupici\'\'\'\'\'\n\n//\'\'\'\'\'První tři kapitoly jsou vlastně takový úvod jen\'\'\'\'\'\n\n==Číselné množiny==\n[[Soubor:Ciselnemnoziny.png]]\n==Okolí bodu==\n[[Soubor:Okolibodu.png]]\nNení li podstatný poloměr okolí, vynecháváme v zápisu písmenko divné e.\n\nBod a je střed okolí.\n===Redukované okolí bodu===\n[[Soubor:Redukovane_okoli.png]]\n\n==Hromadný bod==\nPotřebný k definování limity\n[[Soubor:Hromadny_bod.png]]\n\n==Meze==\n\n[[Soubor:Meze.png]]\n\n==Min a Max==\n[[Soubor:Minmax.png]]\n\n==Funkce==\n//shrnutí kapitoly\n[[Soubor:Funkce.png]]\n\n=Diferenciální počet=\n\n==Limita==\n[[Soubor:Limita.png]]\n\nFunkce je v bodě x spojitá, pokud má v tomto bodě definovanou limitu.\n\nLimita parciální funkce je limitou vzhledem k množině M, která parciální funkci vymezuje nazývá se též relativní limitou.\n\n===Limita posloupnosti===\n[[Soubor:Limitaposloupnosti.png]]\n==Derivace==\n[[Soubor:Derivace.png]]\n\n===Pravidla===\n[[Soubor:Pravidladerivovani.png]]\n\n====L\'Hospitalovo pravidlo====\nJsou dvě, jedno pro vlastní limity (0) a druhé pro nevlastní (nekonečno)\n\n[[Soubor:Hospital.png]]\n\n===Vzorecky===\n[[Soubor:Dervzorce.png]]\n\n==Vyšší řády==\n[[Soubor:Derdva.png]]\n[[Soubor:Zderivuj.png]]\n\n===Taylerův polynom===\n[[Soubor:Taylor.png]]\n\n==Extrémy==\n===Lokální===\n[[Soubor:Lokalniextremy.png]]\n\n===Globální===\ntaké absolutní\n\nPři hledání globálních extrémů funkce na intervalu je třeba nalézt všechny body lokálních extrémů funkce a funkční hodnoty v nich porovnat s hodnotami v krajních\nbodech intervalu; největší z těchto hodnot je globální maximum, nejmenší je globální minimum.\n\n==Průběh funkce==\n\n===Konvexnost===\ndruhá derivace je větší než nula\n===Konkávnost===\ndruhá derivace je menší než nula\n===Inflexní body===\ndruhá derivace je rovna nule\n\nMísto, kde se mění konvexní na konkávní nebo naopak.\n===Vyšetření===\n[[Soubor:Vysprubfce.png]]\n\n=Integrální počet=\n====Primitivní funkce====\nPrimitivní funkce F(x) je taková, kde F\'(x) = f(x)\n==Neurčitý integrál==\nJe systémem všech primitivních funkcí\n\n==Integrační metody==\n===Jednoduchý===\n[[Soubor:Integrovani.png]]\n===Per partes===\n[[Soubor:Perpartes.png]]\n\n===Substituce===\nTeoretický popis je moc složitý. Vycházíme z toho, že f(x)dx nahradíme nějakou t(x)dt, který už umíme zintegrovat, a potom zpátky dosadíme za t.\n\n==Určitý integrál==\nGeometricky: obsah plochy pod grafem (pokud je funkce záporná je lepší uvést, že se jedná o plochu mezi grafem a osou x)\n\njde na něj použít metoda substituce i per partes\n\n=Integrály a derivace více proměnných=\n\n[[Soubor:Funkce_vice.png]]\n\nShrnutí\n\n[[Soubor:Shrnutifcevice.png]]\n\n==Derivace==\n\'\'\'Funkce je hladká\'\'\' v daném bodě, pokud všechny její parc. derivace jsou v daném bodě spojité.\n\n\'\'\'Gradient funkce\'\'\' v bodě X je vektor [[Soubor:Gradient.png]], tedy vektor parciálních derivací podle všech proměnných. Gradien udává směr, ve kterém funkce v daném bodě nejrychleji roste (je kolmý na hladinu funkce). \n\n\'\'\'Stacionárními body\'\'\' jsou body, ve kterých gradient je nulový vektor – tedy všechny parciální derivace jsou nulové.\n\n\'\'\'Extrémy funkce\'\'\' mohou nastat ve stacionárních bodech. Může se však jednat i o sedlový bod.\n\n[[Soubor:Extrenyvice.png]]\n\nSměrová derivace je to tehdy pokud je vektor jednotkový.\n\nPro vyšší řády se opět dá použít Taylorův polynom.\n\n===Parciální derivace===\n\n[[Soubor:Parcialniderivace.png]]\n\n==Integrál==\n[[Soubor:Integralvice.png]]\n\n[[Soubor:Integralvicevypocet.png]]','utf-8'),(1424,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 09, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07 (08, 09, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1425,'','utf-8'),(1426,'','utf-8'),(1427,'','utf-8'),(1428,'','utf-8'),(1429,'','utf-8'),(1430,'======Základní pojmy======\n# \'\'\'Bit\'\'\' - \'\'\'Bi\'\'\'nary digi\'\'\'t\'\'\', dvojková číslice\n# \'\'\'Rozsah zobrazení\'\'\' - interval ohraničený zleva nejmenším a zprava největším zobrazitelným číslem\n# \'\'\'Rozlišitelnost zobrazení\'\'\' - nejmenší (kladné) zobrazitelné číslo\n# \'\'\'Přesnost zobrazení\'\'\' - počet platných dekadických číslic, které je možné zobrazit v daném paměťovém prostoru (hodnota nezávislá na velikosti zobrazovaného čísla) \n\n----\n\n======BCD kód======\nKód, který se používá pro reprezentaci desítkových čísel. Desítková číslice je zakódovaná na 4 bitech, přičemž tato čtveřice může nabývat hodnot 0-9.\n\n----\n\n====Pevná řádová čárka====\nV tomto zobrazení definujeme místa před a místa za řádovou čárkou. Dnes už se pro desetinná čísla téměř nepoužívá. Na klasická celá čísla se dá pohlížet jako na čísla s pevnou řádovou čárkou a 0 místy za čárkou.\n\n----\n\n=====Zobrazení kladných čísel (bez znaménka)=====\nPro k-bitový paměťový prostor a kladné dvojkové číslo, které má \'\'\'n\'\'\' míst vlevo a \'\'\'m\'\'\' míst vpravo od řádové tečky, přičemž \'\'\'k = n + m\'\'\',platí:\n# \'\'\'rozsah zobrazení:\'\'\' <0, (2^n-2^(-m))>\n# \'\'\'rozlišitelnost zobrazení:\'\'\' 2^(-m)\n# \'\'\'přesnost zobrazení:\'\'\' k*log_10(2)\n\nV současné době se v pevné řádové čárce zobrazují prakticky výlučně jen celá čísla (m = 0, k = n). Pak rozsah zobrazení je dán intervalem <0, (2^n-1)> a rozlišitelnost zobrazení hodnotou 1.\n\n----\n\n=====Zobrazení čísel se znaménkem=====\nK zobrazení čísel se znaménkem používáme transformace:\n# přímý kód\n# doplňkový kód\n# kód transformované nuly\n\nInformaci o znaménku čísla ve všech uvedených kódech nese nejvyšší bit, který se proto nazývá bit znaménkový. Všechny ostatní bity, které nesou informaci o hodnotě čísla se pak souhrnně označují jako bity významové.\n\nx - zobrazované číslo\n\nX - obraz zobrazovaného čísla\n\n----\n\n======Přímý kód======\nČíslo kladné se od stejného čísla záporného v přímém kódu liší pouze hodnotou nejvyššího bitu (0 pro kladná čísla, 1 pro záporná čísla). Nula v tomto kódu má dva rovnocenné obrazy! \n\n[[Soubor:Primy.png]]\n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^(n-1)-x\'\'\'\n## pro x z intervalu <-(2^(n-1)-2^(-m)), 0>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 128-x\'\'\' \n## pro x z intervalu <-127, 0>\n\n[[Soubor:Primy1.png]]\n\n----\n\n======Inverzní kód======\nKladná čísla se vyjadřují normálním způsobem, záporná invertováním všech bitů (včetně znaménkového).\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# x = 28\n## 00011100\n# x = -28\n## 11100011\n\n----\n\n======Doplňkový kód======\nČíslo kladné se od stejného čísla záporného v doplňkovém kódu liší hodnotou nejvyššího bitu (0 pro kladná čísla a nulu, 1 pro záporná čísla) i hodnotou všech ostatních bitů! Prakticky se číslo s opačným znaménkem získá inverzí hodnot všech bitů a aritmetickým přičtením jedničky k nejnižšímu bitu.\n\n[[Soubor:Doplnkovy.png]] \n\n# \'\'\'X = x\'\'\'\n## pro x z intervalu <0, 2^(n-1)-2^(-m)>\n# \'\'\'X = 2^n + x\'\'\'\n## pro x z intervalu <-2^(n-1), -2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = x\'\'\' \n## pro x z intervalu <0, 127>\n# \'\'\'X = 256+x\'\'\' \n## pro x z intervalu <-128, -1>\n\n[[Soubor:Doplnkovy1.png]]\n\n----\n\n======Kód transformované nuly======\nČíslo kladné se od stejného čísla záporného v kódu transformované nuly liší opět hodnotou nejvyššího bitu (tentokrát 1 pro kladná čísla, 0 pro záporná čísla!) i hodnotou ostatních bitů. V tomto kódu se číslo prakticky získá z čísla v doplňkovém kódu změnou hodnoty nejvyššího bitu.\n\nNazývá se to také kód posunuté nuly. Posunutá nula znamená, že k celému číslu se přičte nějaká hodnota, například k osmibitovému číslu se přičte 127. Takže binární 00000000 bude znamenat -128, binární 10000000 bude ve skutečnosti 0 a binární 11111111 bude +127. Má to výhodu v jednoduchém porovnávání dvou čísel, kde nezáleží na tom jestli jsou kladná nebo záporná.\n\n[[Soubor:Transf_nula.png]]\n\n# \'\'\'X = 2^(n-1) + x\'\'\'\n## pro x z intervalu <-2^(n-1), 2^(n-1)-2^(-m)>\n\n\'\'\'Příklady převodu:\'\'\'\nn = 8 bitů, m = 0\n# \'\'\'X = 128+x\'\'\' \n## pro x z intervalu <-128, 127>\n\n[[Soubor:Transf_nula1.png]]\n\n----\n\n====Pohyblivá řádová čárka====\nNazývá se také \'\'\'floating point\'\'\'.\n\n<m>X = (-1)^S.M.B^E</m>\n\n# \'\'\'S\'\'\' je \'\'\'hodnota znaménkového bitu\'\'\'. Pokud má hodnotu 0, číslo je kladné.\n# \'\'\'M\'\'\' je \'\'\'mantisa\'\'\'. Ta je desetinnou částí tohoto čísla. Je v přímém kódu.\n# \'\'\'B\'\'\' je \'\'\'základ číselné soustavy\'\'\'. Pokud se jedná o dvojkovou soustavu, jeho hodnota bude 2.\n# \'\'\'E\'\'\' je \'\'\'exponent\'\'\'. Jedná se o celé číslo, které ná zvyšovat řád kokrétního čísla v soustavě (např. 1x10^3).\n\nČíslo je v počítači uložené jako:\n\n|S|EEEEEEEE|MMMMMMMMMMMMMMMMMMMMMMM|\n\nKonkrétní příklad je podle standardu IEEE754, ale hlavní myšlenkou je jeden znaménkový bit, přesně vyhrazený počet bitů pro exponent a pro mantisu. \n\n\'\'\'Mantisa\'\'\' - obecně se jedná o desetinný základ čísla s plovoucí řádovou čárkou. Desetinná čárka tohoto čísla se dává mezi první a druhou číslici (tím pádem se v desítkové soustavě jedná o desetinné číslo nepřesahující 10, a celá čáast nabývá hodnot 0-9. V binární soustavě ale celá část může nabývat hodnot jen 0 a 1). Bity vyhrazené pro mantisu však ukládají pouze její desetinnou část (M). Pokud exponent bude rovný nule, jedná se o číslo menší než jedna a mantisa bude 0,M. V opačném případě to bude 1,M. Tím pádem mantisa nepřekračuje hodnotu 2.\n\n\nPokud chceme zakódovat číslo, např. -10,8, tak ho vydělíme nejbližší menší mocninou dvojky. V tomto případě je to číslo 8, tedy 2^3. Zůstane nám číslo 1,35. A těch \"35\" se zakóduje do bitů mantisy jako desetinné číslo (jiný převod). Proto ta čísla nejednou nejsou úplně přesná. pokud máme 4 bity exponentu a 8 bitů mantisy, výsledné číslo bude vypadat takhle:\n\n\'\'\'1 1000 00100011\'\'\'\n\n\'\'\'Speciální stavy:\'\'\'\n# E=0, M=0 --> X=0\n# E=max, M=0 --> X = nekonečno\n# E=max, M<>0 --> X = NaN - not a number\n\n======IEEE754======\nUkládá binární čísla v plovoucí desetinné čárce na 32 bitech (jednoduchá přesnost) nebo 64 bitech (dvojitá přesnost). Dané číslo je rozděleno na mantisu a exponent. Nejlevější bit je vždy znaménkový, následuje 8 bitů pro exponent a zbylých 23 je mantisa. Na 64 bitech je rozdělení 1, 11, 52.\n\n----\n\n====Aritmetické operace====\n\'\'\'Přetečení\'\'\' - výsledek operace spadá mimo rozsah zobrazení\n\n======Sčítání======\nBinární čísla lze sčítat stejně jako čísla desítková. Potřebné je dávat pozor na přenos a přetečení. K přenosu jedničky do vyššího řádu dojde tehdy, je-li výsledkem součtu dvou čísel pod sebou hodnota větší nebo rovna 10 (binárně).\n\n[[Soubor:Add.png]]\n\n\'\'\'Doplňkový kód:\'\'\'\n# všechny bity se scčítají stejně (včetně znaménkového)\n# vznikne-li přenos ze znaménkového bitu, tak se ignoruje\n# přetečení nastane pokud se přenos do znaménkového bitu nerovná přenosu ze znaménkového bitu\n\n[[Soubor:Add1.png]]\n\n======Odčítání======\nPodobné jako sčítání, ale pokud od 0 odečteme 1, výsledek je 1 a musíme odečíst 1 (vypůjčit si) i ze sloupečku vlevo.\n\n[[Soubor:Sub.png]]\n\n\'\'\'Doplňkový kód:\'\'\'\n# odčítání se řeší pomocí sčítání - přičte se záporná hodnota odčítaného čísla\n\n======Násobení======\nZpůsob násobení binárních čísel se nijak neliší od způsobu, jakým násobíme čísla desítková. Číslice u násobitele se berou zprava doleva a mezivýsledky se vždy posouvají doleva o jedno místo. V podstatě neděláme nic jiného, než že horní číslo buď opisujeme v nezměněné podobě, pokud násobíme jedničkou, nebo píšeme samé nuly.\n\n[[Soubor:Mult.png]]\n\n\'\'\'Dopňkový kód:\'\'\'\n# násobí se stejně, ale musí se dávat pozor na přenos znaménka - musí se zleva u daného čísla doplnit jedničky pokud se na daném místě má sčítat.\n\n[[Soubor:Mult1.png]]\n\n----','utf-8'),(1431,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 08, 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1432,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25, 32, 33\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 08\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 34, 35, 36, 37 (10, 32, 33)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1433,'','utf-8'),(1434,'','utf-8'),(1435,'','utf-8'),(1436,'','utf-8'),(1437,'===Algebraické metody===\nLogické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'de Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n[[Soubor:Bool.png]]','utf-8'),(1438,'===Algebraické metody===\nLogické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----','utf-8'),(1439,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----','utf-8'),(1440,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 27\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n13, 18, 24, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1441,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n13, 18, 24, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1442,'== DATOVÉ STRUKTURY ==\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\n----\n\n==== DATOVÝ TYP ====\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\n====== VLASTNOSTI ======\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\n====== OPERÁTORY ======\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\n====== ORDINÁLNÍ ======\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\n====== SKALÁRNÍ ======\n\n• REAL – množina desetinných čísel.\n\n----\n\n==== ABSTRAKTNÍ DATOVÝ TYP (ADT) ====\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\n====== SPECIFIKACE ======\n\n\'\'\'SYNTAX\'\'\'\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\n[[Soubor:26_01.png]]\n\n\'\'\'SÉMANTIKA\'\'\'\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\n====== UKAZATEL ======\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\n====== SEZNAM ======\n\n[[Soubor:26_06.JPG]]\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n[[Soubor:26_02.png]]\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\n====== ZÁSOBNÍK ======\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\n[[Soubor:26_04.JPG]]\n\n====== FRONTA ======\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\n[[Soubor:26_05.JPG]]\n\n----\n\n==== STRUKTUROVANÝ DATOVÝ TYP ====\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\n====== POLE ======\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\n====== STRING ======\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\n====== STRUKTURA (ZÁZNAM) ======\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\n----\n\n==== VYHLEDÁVACÍ TABULKA ====\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n----\n\n==== STROM ====\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\n====== BINÁRNÍ STROM ======\n\n[[Soubor:27_07.JPG]]\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, počet jehož uzlů je 2n \"1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\n[[Soubor:26_03.png]]\n\n----\n\n== ŘÍDÍCÍ STRUKTURY ==\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\n==== PŘÍKAZ ====\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\n====== JEDNODUCHÝ PŘÍKAZ ======\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\n====== PŘÍKAZY PROCEDURY (FUNKCE) ======\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\n----\n\n==== STRUKTUROVANÉ PŘÍKAZY ====\n\n• Všechny lze do sebe zanořovat.\n\n====== SLOŽENÝ PŘÍKAZ ======\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\n====== ALTERNATIVNÍ PŘÍKAZY ======\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\n====== PŘÍKAZY CYKLU ======\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1443,'== DATOVÉ STRUKTURY ==\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\n----\n\n==== DATOVÝ TYP ====\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\n====== VLASTNOSTI ======\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\n====== OPERÁTORY ======\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\n====== ORDINÁLNÍ ======\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\n====== SKALÁRNÍ ======\n\n• REAL – množina desetinných čísel.\n\n----\n\n==== STRUKTUROVANÝ DATOVÝ TYP ====\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\n====== POLE ======\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\n====== STRING ======\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\n====== STRUKTURA (ZÁZNAM) ======\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\n----\n\n==== ABSTRAKTNÍ DATOVÝ TYP (ADT) ====\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\n====== SPECIFIKACE ======\n\n\'\'\'SYNTAX\'\'\'\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\n[[Soubor:26_01.png]]\n\n\'\'\'SÉMANTIKA\'\'\'\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\n====== UKAZATEL ======\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\n====== SEZNAM ======\n\n[[Soubor:26_06.JPG]]\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n[[Soubor:26_02.png]]\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\n====== ZÁSOBNÍK ======\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\n[[Soubor:26_04.JPG]]\n\n====== FRONTA ======\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\n[[Soubor:26_05.JPG]]\n\n----\n\n==== VYHLEDÁVACÍ TABULKA ====\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n----\n\n==== STROM ====\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\n====== BINÁRNÍ STROM ======\n\n[[Soubor:27_07.JPG]]\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, počet jehož uzlů je 2n \"1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\n[[Soubor:26_03.png]]\n\n----\n\n== ŘÍDÍCÍ STRUKTURY ==\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\n==== PŘÍKAZ ====\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\n====== JEDNODUCHÝ PŘÍKAZ ======\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\n====== PŘÍKAZY PROCEDURY (FUNKCE) ======\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\n----\n\n==== STRUKTUROVANÉ PŘÍKAZY ====\n\n• Všechny lze do sebe zanořovat.\n\n====== SLOŽENÝ PŘÍKAZ ======\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\n====== ALTERNATIVNÍ PŘÍKAZY ======\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\n====== PŘÍKAZY CYKLU ======\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1444,'== DATOVÉ STRUKTURY ==\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\n----\n\n==== DATOVÝ TYP (NESTRUKTUROVANÝ) ====\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\n====== VLASTNOSTI ======\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\n====== OPERÁTORY ======\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\n====== ORDINÁLNÍ ======\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\n====== SKALÁRNÍ ======\n\n• REAL – množina desetinných čísel.\n\n----\n\n==== STRUKTUROVANÝ DATOVÝ TYP ====\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\n====== POLE ======\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\n====== STRING ======\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\n====== STRUKTURA (ZÁZNAM) ======\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\n----\n\n==== ABSTRAKTNÍ DATOVÝ TYP (ADT) ====\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\n====== SPECIFIKACE ======\n\n\'\'\'SYNTAX\'\'\'\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\n[[Soubor:26_01.png]]\n\n\'\'\'SÉMANTIKA\'\'\'\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\n====== UKAZATEL ======\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\n====== SEZNAM ======\n\n[[Soubor:26_06.JPG]]\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n[[Soubor:26_02.png]]\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\n====== ZÁSOBNÍK ======\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\n[[Soubor:26_04.JPG]]\n\n====== FRONTA ======\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\n[[Soubor:26_05.JPG]]\n\n----\n\n==== VYHLEDÁVACÍ TABULKA ====\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n----\n\n==== STROM ====\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\n====== BINÁRNÍ STROM ======\n\n[[Soubor:27_07.JPG]]\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, počet jehož uzlů je 2n \"1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\n[[Soubor:26_03.png]]\n\n----\n\n== ŘÍDÍCÍ STRUKTURY ==\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\n==== PŘÍKAZ ====\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\n====== JEDNODUCHÝ PŘÍKAZ ======\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\n====== PŘÍKAZY PROCEDURY (FUNKCE) ======\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\n----\n\n==== STRUKTUROVANÉ PŘÍKAZY ====\n\n• Všechny lze do sebe zanořovat.\n\n====== SLOŽENÝ PŘÍKAZ ======\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\n====== ALTERNATIVNÍ PŘÍKAZY ======\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\n====== PŘÍKAZY CYKLU ======\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1445,'','utf-8'),(1446,'','utf-8'),(1447,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]','utf-8'),(1448,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n13, 18, 24, 26, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1449,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n13, 18, 24, 26, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1450,'RELAČNÍ DATOVÝ MODEL\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\nKLÍČE\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\nRELAČNÍ DATOVÁ STRUKTURA\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\nRELACE\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\nVLASTNOSTI\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\nINTEGRITNÍ OMEZENÍ (PRAVIDLA)\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\nPRAVIDLO INTEGRITY ENTIT\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\nPRAVIDLO REFERENČNÍ INTEGRITY\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\nRELAČNÍ ALGEBRA\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\nTRADIČNÍ OPERACE\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n \nRELAČNÍ KALKUL\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\nSQL\n\nDDL (DATA DEFINITION LANGUAGE)\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\nDATOVÉ TYPY\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\nCREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ)\n\n1) CREATE TABLE - vytvoření tabulky:\n\n <nowiki>\n CREATE TABLE jm_bázové_tabulky (def_sloupce, ...[definice_integritních_omezení_tabulky]) \n </nowiki>\n\n• Definice sloupce:\n\n <nowiki>\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n </nowiki>\n\n• Integritní omezení (deklarativní): \n\n <nowiki>\n [CONSTRAINT jmeno] omezení\n </nowiki>\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n <nowiki>\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n </nowiki>\n\n3) CREATE INDEX - vytvoření indexu:\n\n <nowiki>\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n </nowiki>\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n <nowiki>\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n </nowiki>\n\nALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ)\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\n <nowiki>\n ALTER TABLE jm_bázové_tabulky akce \n </nowiki>\n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE… \n\nDROP (ODSTRAŇOVÁNÍ OBJEKTŮ)\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n <nowiki>\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n </nowiki>\n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n <nowiki>\n DCL (DATA CONTROL LANGUAGE)\n </nowiki>\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\nDML (DATA MANIPULATION LANGUAGE)\n\nJOIN (SPOJOVÁNÍ RELACÍ)\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\nVNITŘNÍ SPOJENÍ (INNER )\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\nVNĚJŠÍ SPOJENÍ (OUTER)\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\nSELECT (VÝBĚR)\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n <nowiki>\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl], … \n FROM tabulkový_výraz [[AS] [alias_tab]], … \n [WHERE podmínka] \n [GROUP BY jm_sloupce_z_FROM|číslo, …] \n [HAVING podmínka] \n [ORDER BY jm_sloupce_z_SELECT|číslo [ASC|DESC]], … \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky „Ze kterých měst jsou klienti spořitelny?“ SELECT DISTINCT město FROM Klient.\n\nDATABÁZOVÉ POHLEDY\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n <nowiki>\n CREATE VIEW jm_pohledu [(jm_sloupce, …)] AS tab_výraz [WITH CHECK OPTION] \n </nowiki>\n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n <nowiki>\n DROP VIEW jm_pohledu [RESTRICT|CASCADE] \n </nowiki>\n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n <nowiki>\n CREATE MATERIALIZED VIEW MBrnensti \n REFRESH ON COMMIT AS \n SELECT* FROM Klient WHERE mesto=\'Brno\' \n </nowiki>\n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\nAGREGAČNÍ FUNKCE\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n <nowiki>\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n </nowiki>\n\nDYNAMICKÉ SQL\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n <nowiki>\n PREPARE jméno_příkazu FROM řetězec|proměnná\n </nowiki>\n\n• Vykonání příkazu: \n\n <nowiki>\n EXECUTE jm_příkazu [INTO …][ USING vstupní_hodnoty]\n </nowiki>\n\n• Uvolnění prostoru: \n\n <nowiki>\n DEALOCATE PREPARE jm_příkazu\n </nowiki>\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n <nowiki>\n EXECUTE IMMEDIATE řetězec|proměnná\n </nowiki>\n\nEMBEDDED SQL\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze píšete SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n <nowiki>\n EXEC SQL SQL_příkaz \n </nowiki>\n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n <nowiki>\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION\n </nowiki>\n\nPROCEDURA\n\n• Uložená procedura je sada příkazů SQL, které jsou uložené na serveru, zkompilované pro rychlejší použití. Sada příkazů je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n <nowiki>\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n </nowiki>\n\n• A zavolat pomocí příkazu:\n\n <nowiki>\n call sp_vratradky (10, 20)\n </nowiki>\n\nTRIGGER\n\n• Trigger je uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze).\n\n• V triggeru lze mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.','utf-8'),(1451,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n----\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]] \n\n==== RELAČNÍ KALKUL ====\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n <nowiki>\n CREATE TABLE jm_bázové_tabulky (def_sloupce, ...[definice_integritních_omezení_tabulky]) \n </nowiki>\n\n• Definice sloupce:\n\n <nowiki>\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n </nowiki>\n\n• Integritní omezení (deklarativní): \n\n <nowiki>\n [CONSTRAINT jmeno] omezení\n </nowiki>\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n <nowiki>\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n </nowiki>\n\n3) CREATE INDEX - vytvoření indexu:\n\n <nowiki>\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n </nowiki>\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n <nowiki>\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n </nowiki>\n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\n <nowiki>\n ALTER TABLE jm_bázové_tabulky akce \n </nowiki>\n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE... \n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n <nowiki>\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n </nowiki>\n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE...\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER)\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n[[Soubor:33_06.PNG]]\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n <nowiki>\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl], ... \n FROM tabulkový_výraz [[AS] [alias_tab]], ... \n [WHERE podmínka] \n [GROUP BY jm_sloupce_z_FROM|číslo, ...] \n [HAVING podmínka] \n [ORDER BY jm_sloupce_z_SELECT|číslo [ASC|DESC]], ... \n </nowiki>\n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky „Ze kterých měst jsou klienti spořitelny?“ SELECT DISTINCT město FROM Klient.\n\n====== DATABÁZOVÉ POHLEDY ======\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n <nowiki>\n CREATE VIEW jm_pohledu [(jm_sloupce, ...)] AS tab_výraz [WITH CHECK OPTION] \n </nowiki>\n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n <nowiki>\n DROP VIEW jm_pohledu [RESTRICT|CASCADE] \n </nowiki>\n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n <nowiki>\n CREATE MATERIALIZED VIEW MBrnensti \n REFRESH ON COMMIT AS \n SELECT* FROM Klient WHERE mesto=\'Brno\' \n </nowiki>\n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n====== AGREGAČNÍ FUNKCE ======\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n <nowiki>\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n </nowiki>\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n <nowiki>\n PREPARE jméno_příkazu FROM řetězec|proměnná\n </nowiki>\n\n• Vykonání příkazu: \n\n <nowiki>\n EXECUTE jm_příkazu [INTO …][ USING vstupní_hodnoty]\n </nowiki>\n\n• Uvolnění prostoru: \n\n <nowiki>\n DEALOCATE PREPARE jm_příkazu\n </nowiki>\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n <nowiki>\n EXECUTE IMMEDIATE řetězec|proměnná\n </nowiki>\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze píšete SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n <nowiki>\n EXEC SQL SQL_příkaz \n </nowiki>\n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n <nowiki>\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION\n </nowiki>\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů SQL, které jsou uložené na serveru, zkompilované pro rychlejší použití. Sada příkazů je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n <nowiki>\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n </nowiki>\n\n• A zavolat pomocí příkazu:\n\n <nowiki>\n call sp_vratradky (10, 20)\n </nowiki>\n\n====== TRIGGER ======\n\n• Trigger je uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze).\n\n• V triggeru lze mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.','utf-8'),(1452,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n----\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]] \n\n==== RELAČNÍ KALKUL ====\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n <nowiki>\n CREATE TABLE jm_bázové_tabulky (def_sloupce, ...[definice_integritních_omezení_tabulky]) \n </nowiki>\n\n• Definice sloupce:\n\n <nowiki>\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n </nowiki>\n\n• Integritní omezení (deklarativní): \n\n <nowiki>\n [CONSTRAINT jmeno] omezení\n </nowiki>\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n <nowiki>\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n </nowiki>\n\n3) CREATE INDEX - vytvoření indexu:\n\n <nowiki>\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n </nowiki>\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n <nowiki>\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n </nowiki>\n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\n <nowiki>\n ALTER TABLE jm_bázové_tabulky akce \n </nowiki>\n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE... \n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n <nowiki>\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n </nowiki>\n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE...\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER)\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n[[Soubor:33_06.PNG]]\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n <nowiki>\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl], ... \n FROM tabulkový_výraz [[AS] [alias_tab]], ... \n [WHERE podmínka] \n [GROUP BY jm_sloupce_z_FROM|číslo, ...] \n [HAVING podmínka] \n [ORDER BY jm_sloupce_z_SELECT|číslo [ASC|DESC]], ... \n </nowiki>\n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky „Ze kterých měst jsou klienti spořitelny?“ SELECT DISTINCT město FROM Klient.\n\n====== DATABÁZOVÉ POHLEDY ======\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n <nowiki>\n CREATE VIEW jm_pohledu [(jm_sloupce, ...)] AS tab_výraz [WITH CHECK OPTION] \n </nowiki>\n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n <nowiki>\n DROP VIEW jm_pohledu [RESTRICT|CASCADE] \n </nowiki>\n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n <nowiki>\n CREATE MATERIALIZED VIEW MBrnensti \n REFRESH ON COMMIT AS \n SELECT* FROM Klient WHERE mesto=\'Brno\' \n </nowiki>\n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n====== AGREGAČNÍ FUNKCE ======\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n <nowiki>\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n </nowiki>\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n <nowiki>\n PREPARE jméno_příkazu FROM řetězec|proměnná\n </nowiki>\n\n• Vykonání příkazu: \n\n <nowiki>\n EXECUTE jm_příkazu [INTO …][ USING vstupní_hodnoty]\n </nowiki>\n\n• Uvolnění prostoru: \n\n <nowiki>\n DEALOCATE PREPARE jm_příkazu\n </nowiki>\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n <nowiki>\n EXECUTE IMMEDIATE řetězec|proměnná\n </nowiki>\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze píšete SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n <nowiki>\n EXEC SQL SQL_příkaz \n </nowiki>\n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n <nowiki>\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION\n </nowiki>\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů SQL, které jsou uložené na serveru, zkompilované pro rychlejší použití. Sada příkazů je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n <nowiki>\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n </nowiki>\n\n• A zavolat pomocí příkazu:\n\n <nowiki>\n call sp_vratradky (10, 20)\n </nowiki>\n\n====== TRIGGER ======\n\n• Trigger je uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze).\n\n• V triggeru lze mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.','utf-8'),(1453,'','utf-8'),(1454,'','utf-8'),(1455,'','utf-8'),(1456,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25, 32\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 08\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37 (10, 32)\n\nKrasne se nam to tu plni!!!\n\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1457,'== DATOVÉ STRUKTURY ==\n\n• Datová struktura je abstraktní vyjádření zúčastněných vlastností (atributů) prvků (objektů) řešeného problému.\n\n• Podle typu komponent:\n\n1) HOMOGENNÍ – všechny komponenty struktury jsou téhož typu. Př.: pole záznamů (i když záznam sám o sobě je heterogenní).\n\n2) HETEROGENNÍ – komponenty struktury nejsou téhož typu. Příklad: Záznam.\n\n• Podle změny komponent a/nebo způsobu uspořádání.\n\n1) STATICKÁ – nemůže měnit v průběhu výpočtu počet svých komponent ani způsob uspořádání.\n\n2) DYNAMICKÁ – může měnit v průběhu výpočtu počet svých komponent a způsob uspořádání struktury.\n\n• Všechny kategorie posuzujeme na jisté úrovni abstrakce. Snížíme-li se na úroveň stroje, jsou data vždy homogenní a statická.\n\n----\n\n==== DATOVÝ TYP (NESTRUKTUROVANÝ) ====\n\n• Datový typ je množina hodnot a množina operací nad těmito hodnotami.\n\n• Typ proměnných se zavádí v definici a v deklaraci proměnné.\n\n• Příslušnost k typu je syntaktickou vlastností objektu, takže pravidla jazyka určují, v jakých souvislostech lze používat objekty kterých typů. \n\n• Musíme se ujistit, že operandy i výsledek operace jsou správného typu. To se dělá implicitní konverzí typu (dle pravidel jazyka pro konverzi, automatické – int/float = float). Jindy se používá přetypování neboli explicitní konverzi ( x = 1.5; int y = (int) x;). \n\n====== VLASTNOSTI ======\n\n• NÁZEV (logical, Boolean, int, real, float, den, pohlaví…)\n\n• MNOŽINA HODNOT (true, 358, „“…)\n\n• MNOŽINA OPERACÍ (Jestliže operátor připouští operandy několika typů (např. / pro dělení jak čísel reálných tak čísel celých), pak se typ operace / určí podle dalších pravidel jazyka. Int/int -> int, int/float, float/int, float/float -> float)\n\n1) standardní (z ALU – aritmetické a logické operace) - %, and, or, /, * ... \n\n2) z knihoven – práce se seznamem, vektory, frontou … \n\n3) definované uživatelem\n\n• MNOŽINOU ATRIBUTŮ – které vlastnosti jsou programově dosažitelné.\n\n====== OPERÁTORY ======\n\n• EKVIVALENCE – nad primitivními typy, množinami a textovými řetězci.\n\n• PŘIŘAZENÍ – obvykle nad všemi typy, ale rozsáhlé a vysoce strukturované vyžadují mnoho strojových instrukcí.\n\n• TRANSFORMAČNÍ OPERÁTORY – mapují jeden datový typ do jiného.\n\n• Aritmetické operátory: +, –, *, /, %\n\n• Relační operátory: ==,!=, <, ≤, ≥, >\n\n====== ORDINÁLNÍ ======\n\n• INTEGER - Tento typ reprezentuje množinu celých čísel, která je v daném programovacím jazyce k dispozici jako standardní datový typ (konečná množina).\n\n• BOOLEAN – true/false\n\n• CHAR – znak\n\n• Každý prvek má definovaný předchozí a následující prvek.\n\n====== SKALÁRNÍ ======\n\n• REAL – množina desetinných čísel.\n\n----\n\n==== STRUKTUROVANÝ DATOVÝ TYP ====\n\n• Hodnoty jsou obvykle složeny z hodnot komponent dříve definovaných (KONSTITUČNÍCH, KOMPOZIČNÍCH) TYPŮ.\n\n• Má strukturovanou hodnotu, která je definovaná tehdy, když jsou definované hodnoty všech jejích komponent.\n\n• Jsou-li všechny hodnoty téhož konstitučního typu, pak tomuto typu říkáme BÁZOVÝ TYP.\n\n• PRIMITIVNÍ TYPY jsou nestrukturované, většinou zahrnují čísla, logické hodnoty a znaky.\n\n• Je buď HOMOGENNÍ (všechny komponenty jsou stejného typu), pak se komponentám říká POLOŽKY. \n\nNebo je HETEROGENNÍ (komponenty jsou různého typu) a komponentám se říká SLOŽKY.\n\n====== POLE ======\n\n• Je homogenní datová struktura ortogonálního (pravoúhlého) typu.\n\n• N rozměrného pole se dosahuje tím, že položkami jednorozměrného pole jsou (N-1) rozměrná pole.\n\n• Každá dimenze (rozměr) pole má rozsah indexů, které jsou ordinálního typu a jsou spočitatelné (vyčíslitelné).\n\n• Jednorozměrnému poli říkáme VEKTOR, dvojrozměrnému poli říkáme MATICE. \n\n• INDEX jednoznačně identifikuje prvek pole a má jich tolik, kolik je DIMENZÍ pole.\n\n• ŘÍDKÉ POLE (thin array) je pole, v němž má významné množství prvků stejnou (dominantní) hodnotu – prvky jsou uložené pouze ty, které nemají dominantní hodnotu (u nedefinovaných se předpokládá dominantní hodnota). Řídká implementace pole snižuje paměťovou náročnost reprezentace za cenu zvýšení přístupové doby (access time) k prvku pole.\n\n====== STRING ======\n\n• Stukturovaný homogenní datový typ. Položkami řetězce jsou znaky.\n\n====== STRUKTURA (ZÁZNAM) ======\n\n• Nehomogenní statická struktura definovaná programátorem.\n\n• Umožňuje hierarchie.\n\n----\n\n==== ABSTRAKTNÍ DATOVÝ TYP (ADT) ====\n\n• Používá abstrakci: zdůrazňuje vnější vlastnosti a chování svých prvků a potlačuje způsob, jakým jsou tyto vlastnosti representovány na nižší (např. strojové, paměťové) úrovni a jakým způsobem je jejich chování (operace) implementováno.\n\n• Je definován množinou hodnot, jichž mohou nabývat prvky tohoto typu a množinou operací, definovaných nad tímto typem.\n\n• GENERICKÝ ABSTRAKTNÍ DATOVÝ TYP je definován pouze množinou operací (nespecifikuje konstituční datový typ).\n\n• KONSTRUKTOR je operace, která má na vstupu výčet všech komponent a na výstupu strukturu s těmito komponentami.\n\n• SELEKTOR je operace umožňující přístup k jednotlivé komponentě (str[5]).\n\n• ITERÁTOR je operace, která provede zadanou činnost nad všemi prvky homogenní struktury.\n\n• DESTRUKTOR – zruší dynamickou strukturu a vrátí uvolněný prostor.\n\n====== SPECIFIKACE ======\n\n\'\'\'SYNTAX\'\'\'\n\n• Pravidla korektního zápisu konstrukce. Zapisuje se pomocí algebraické signatury nebo diagramem signatury.\n\n• ALGEBRAICKÁ SIGNATURA\n\nPř.: Mějme ADT zvaný PosInt (pozitivní celočíselný typ větší než nula), nad nímž jsou definovány tyto základní operace: ustavení hodnoty jedna (One), inkrementace (Succ), součet dvou prvků tohoto typu (Add) a predikát zjištění, zda má prvek typu PosInt hodnotu jedna (IsOne). Algebraická signatura syntaxe má tvar:\n\n1) One : -> PosInt - Operaci se říká generátor nebo \"inicializace\", nemá žádný vstupní parametr, výstupem je hodnota typu PosInt .\n\n2) ADD : PosInt x PosInt -> PosInt - Operace ma dva vstupní paramtery typu PosInt. Jakékoli dvě hodnoty typu PosInt na vstupu dávají na výstup jednu hodnoty typu PosInt.\n\n3) SUCC : PosInt -> PosInt - Vstupní hodnota i výstupní hodnota je typu PosInt\n\n4) IsOne : PosInt -> Boolean - Operace typu \"predikát\" má na vstupu hodnotu typu PosInt a na výstupu hodnotu typu Boolean.\n\n• DIAGRAM SIGNATURY\n\nGrafický přepis algebraické signatury. Typ je zobrazen oválem, specifikovaný ADT má tlustou čáru, několik operací může mít jen jeden kroužek a operace bez vstupu se nazývá generátor.\n\n[[Soubor:26_01.png]]\n\n\'\'\'SÉMANTIKA\'\'\'\n\n• Popis účinku dané konstrukce.\n\n• Lze ji specifikovat slovním popisem, operačním popisem nebo systémem axiomů (nebo jinými speciálními nástroji a systémy).\n\n• SLOVNÍ VYJÁDŘENÍ\n\n1) Operace One ustaví hodnotu typu Posint rovnu jedné. Tato operace je inicializace typu (generátor).\n\n2) Operace ADD vytvoří aritmetický součet dvou prvků typu Posint.\n\n3) Operace Succ vytvoří hodnotu následující danou hodnotu (hodnotu o jednu větší).\n\n4) Operace (predikát) IsOne nabude hodnoty true, pokud je argument hodnota rovna jedné (jinak má hodnotu false).\n\n• AXIOMATICKÁ SPECIFIKACE\n\n1) ADD(X,Y) = ADD(Y,X)\n\n2) ADD(One,X) = SUCC(X)\n\n3) ADD(SUCC(X),Y) = SUCC(ADD(X,Y))\n\n4) IsOne(One) = true\n\n5) IsOne(SUCC(X)) = false\n\n• OPERAČNÍ SPECIFIKACE\n\nNejčastěji má tvar procedur/funkcí popisujících chování operace ve zvoleném algoritmickém nebo programovacím jazyku.\n\nChování ADT pak vyjadřuje konkrétní implementaci, která nemusí být jedinou možnou implementací takového chování a čtenáři podkládá omezený pohled na vnitřní uspořádání.\n\n====== UKAZATEL ======\n\n• Umožňuje existenci dynamicky vznikajících a zanikajících prvků datových typů.\n\n• Nese v sobě adresu na prvek, na který ukazuje.\n\n• Nil, NULL - nikam neukazuje - tato hodnota je kompatibilní se všemi prvky typu ukazatel.\n\n====== SEZNAM ======\n\n[[Soubor:26_06.JPG]]\n\n• HOMOGENNÍ – komponenty jsou stejného typu.\n\n• LINEÁRNÍ – každý prvek (s výjimkou prvního a posledního) má právě jednoho předchůdce a jednoho následníka.\n\n• DYNAMICKÝ – jeho délka a struktura se mění za běhu programu.\n\n• Prvkem seznamu může být libovolný datový typ (i strukturovaný).\n\n• Může být prázdný.\n\n• Přístup k prvnímu prvku je přímý, k ostatním je sekvenční ve směru průchodu. Jednosměrný lze procházet jen jedním směrem.\n\n[[Soubor:26_02.png]]\n\n• Typické operace nad seznamem: zjištění délky, vytvoření kopie, zrušení, ekvivalence dvou seznamů, relace (lexikografická) dvou seznamů, vkládání nových prvků (na začátek, na pozici danou ukazatelem, pořadím, aktivitou, na konec), hledání pozice a délky nejdelší neklesající posloupnosti prvků v seznamu, vkládání a rušení podseznamu v seznamu, vyhledávání prvku, rušení prvku seznamu, seřazení prvků seznamu podle velikosti prvků (klíče), KONKATENACE (zřetězení) dvou a více seznamů (podseznamů) do jednoho a DEKATENACE (rozčlenění) jednoho seznamu na podseznamy.\n\n====== ZÁSOBNÍK ======\n\n• Zásobník je homogenní, lineární, dynamická struktura. \n\n• Zásobníku se také říká struktura typu LIFO z anglického „Last-In-First-Out“. \n\n• Základní operace jsou: \n\n1) PUSH – přidání pvku na vrchol zásobníku\n\n2) POP – vyzvednutí pvku z vrchol zásobníku\n\n[[Soubor:26_04.JPG]]\n\n====== FRONTA ======\n\n• Fronta je dynamická, homogenní a lineární struktura. \n\n• Někdy se jí říká struktura typu „FIFO“. \n\n• Operace: \n\n1) ENQUEUE – zařazení prvku na konec fronty.\n\n2) DEQUEUE – vyzvednutí prvku ze začítku fronty.\n\n3) Nebo také: Init, QueUp, Remove, Front, Empty, Full\n\n[[Soubor:26_05.JPG]]\n\n----\n\n==== VYHLEDÁVACÍ TABULKA ====\n\n• Operace: Init, Insert, Search, Delete, Copy\n\n• Pro vyhledávání se používají klíče. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n----\n\n==== STROM ====\n\n• Kořenový strom (root tree) je acyklický graf, který má jeden zvláštní uzel (nod), který se nazývá kořen (root). Kořen je uzel, pro nějž platí, že z každého uzlu stromu vede jen jedna cesta do kořene.\n\n• Z každého uzlu vede jen jedna hrana (edge) směrem ke kořeni do uzlu, kterému se říká „otcovský“ uzel a libovolný počet hran k uzlům, kterým se říká „synovské“.\n\n• Výška prázdného stromu je 0, výška stromu s jediným uzlem (kořenem) je 1. V jiném případě je výška stromu dána počtem hran od kořene k nejvzdálenějšímu uzlu + 1.\n\n====== BINÁRNÍ STROM ======\n\n[[Soubor:27_07.JPG]]\n\n• Binární strom je jednou z nejvýznamnějších datových struktur.\n\n• Definice: Binární strom je buď prázdný, nebo sestává z jednoho uzlu zvaného kořen a dvou binárních podstromů – levého a pravého. (Oba podstromy mají vlastnosti binárního stromu.)\n\n• Binární strom sestává z kořene, neterminálních uzlů, které mají ukazatel na jednoho nebo dva uzly synovské a terminálních uzlů (listů), které nemají žádné „potomky“.\n\n• Každý uzel je kořenem svého “podstromu”. Podstromu (subtree) se říká také větev (branch). Uzly na cestě vycházející doleva z kořene vytvářejí hlavní (levou) diagonálu, doprava vedlejší (pravou) diagonálu.\n\n• Binární strom je VÁHOVĚ VYVÁŽENÝ (weight balanced), když pro všechny jeho uzly platí, že počty uzlů jejich levého podstromu a pravého podstromu se rovnají, nebo se liší právě o 1.\n\n• Stromu, jehož počet uzlů je (2^n)-1, pro n>0 a jehož výška je právě n říkáme ABSOLUTNĚ VÁHOVĚ VYVÁŽENÝ strom.\n\n• Binární strom je VÝŠKOVĚ VYVÁŽENÝ (height balanced) , když pro jeho všechny uzly platí, že výška levého podstromu se rovná výšce pravého podstromu, nebo se liší právě o 1.\n\n• PRŮCHOD STROMEM je posloupnost všech uzlů stromu, v níž se žádný uzel nevyskytuje dvakrát. Průchod transformuje nelineární strukturu stromu na lineární.\n\nPreorder – akce (zatím nenavštívený uzel), levý podstrom, pravý podstrom \n\nInorder – levý, akce, pravý\n\nPostorder – levý, pravý, akce\n\n• Ukládá se pomocí dynamické struktury ukazatelů nebo v poli (na obrázku) tak, že prvek s indexem i má následníky (potomky) v poli s indexem 2i+1 a 2i+2.\n\n[[Soubor:26_03.png]]\n\n----\n\n== ŘÍDÍCÍ STRUKTURY ==\n\n• VÝRAZ je konstrukce složená z proměnných, operátorů a volání metod, které jsou složeny pomocí odpovídající syntaxe jazyka a vyúsťují v jednu hodnotu.\n\n==== PŘÍKAZ ====\n\n• Je zhruba shodný s přikazovací větou běžného jazyka. Příkaz tvoří kompletní jednotku vykonávání kódu.\n\n====== JEDNODUCHÝ PŘÍKAZ ======\n\n• Nejdůležitějším je PŘIŘAZOVACÍ PŘÍKAZ (=, := …). Proměnná i výraz musí být vzájemně kompatibilní vzhledem k přiřazení (dva prvky jsou kompatibilní vzhledem k přiřazení, když jsou jejich typy identické (ekvivalentní)). Jde ho použít pro všechny jednoduché i strukturované typy s výjimkou typu file a strukturovaných typů, které jako svou komponentu obsahují typ file.\n\n====== PŘÍKAZY PROCEDURY (FUNKCE) ======\n\n• Nástroj pro zvyšování abstrakce příkazů (výrazů).\n\n• Má formu uzavřeného podprogramu (na místě každého použití procedury (funkce) se překladem generuje skok do podprogramu, který je obecně umístěn na jiném místě paměti, než hlavní program, a po provedení podprogramu se zase vrací za zpět do hlavního programu do místa za skok).\n\n• DEKLARACE funkce (někdy také prototyp, v ukázce na začátku) se skládá z návratového typu, názvy funkce a seznamu parametrů. Ve většině případů ji lze vynechat, a použít rovnou definici. DEFINICE funkce rozšiřuje deklaraci o blok těla funkce. \n\n• TĚLO FUNKCE by mělo obsahovat příkaz RETURN za kterým by měla následovat vracená hodnota jejíž typ se musí shodovat s návratovým typem funkce. \n\n• Pokud má funkce návratový typ VOID, za returnem nic nenásleduje. Příkaz return přeruší další provádění. Někdy se funkce s typem void označuje jako PROCEDURA. \n\n• Funkce se volá jejím názvem a zadanými prarametry.\n\n----\n\n==== STRUKTUROVANÉ PŘÍKAZY ====\n\n• Všechny lze do sebe zanořovat.\n\n====== SLOŽENÝ PŘÍKAZ ======\n\n• Sekvence příkazů oddělených středníky a uzavřených mezi složené závorky {příkaz1; příkaz2; … } (begin a end, odsazení atp.).\n\n====== ALTERNATIVNÍ PŘÍKAZY ======\n\n• Podmíněný příkaz IF - příkaz, který se provede, když má jeho booleovský řídící výraz hodnotu true. Může mít else, za kterým je uvedeno, co se má provést, pokud má řídící výraz hodnotu false.\n\n• Vícečetný alter. příkaz CASE – řízen výrazem ordinálního typu, může mít else, který se provede, pokud žádná možnost neplatí.\n\n====== PŘÍKAZY CYKLU ======\n\n• Počítané (explicitní): FOR\n\n• Nepočítané (implicitní): WHILE, DO (repeat-until)\n\n• Nekonečné: ukončené jinak než podmínkou (např. příkaz break;).\n\n• Řídicí proměnná (počitadlo) je ordinárního typu a předpokládá se jeho inkrementace (zvýšení na hodnotu následníka) nebo dekrementaci snížení na hodnotu předchůdce). \n\n• Vlastní průchod cyklem (jedno provedení těla cyklu, smyčka) má podobu jednoho (složeného) příkazu uvedeného v těle příkazu.\n\n• Po skončení příkazu cyklu provedením jeho posledního průchodu se předpokládá nedefinovaná hodnota řídicí proměnné (proměná pro počítadlo je vymazána).\n\n• Přerušení: \n\nCONTINUE – přestane provádět tělo smyčky a začne další iteraci.\n\nBREAK – úplně přestane smyčku provádět a dál pokračuje v běhu programu.','utf-8'),(1458,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n13, 18, 24, 26, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1459,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\'\'//Dobré je začít třeba s tím, k čemu se to dá použít -- odstranění aliasingu (low pass filtr -> hned doplníš i ty dva zbývající typy). Uvést nějaké pěkné vlastnosti, třeba tu, že je to lineární operace (teda, pokud vím), nakreslit si IIR a říct, jak z toho dostat rek. IIR, FIR. Co je to přenosová funkce a napsat jim ji tam a co udává, co do ní vstupuje -> tadá, jsi najednou u impulsní odezvy na Diracův , resp. Kroeneckerův impuls. Jak budeš u toho odvzování,tak zmíníš z-transformaci a výpočet H(z) dosazením za z = e^{j\\omega ?}, diferenční rovnici jako jiný zápis pro filtr. Mno a nakonec něco k vlastnostem filtru - nuly a póly, stabilitu.\n\'\'\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/spoj_syst/spoj_syst.pdf str 18\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace====\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne.\n\nMartin Hyrš:\n\npřenosová funkce H(z) se získá z rovnic filtru, a funguje pro každé komplexní číslo. Když jí nakrmíš frekvence z jednotkové kružnice, získáš frekvenční charakteristiku filtru -- to je to, co nás u filtru zajímá. Jinak je to ten proces, kdy motorovou pilou vyřízneš kolečko z komplexních Krkonoš.\n\nH(z) žere jakékoliv komplexní číslo, mě ale zajímají jen skutečné frekvence, ktreré leží na jednotkové kružnici. Takže z celé komplexní funkce H(z) si vyříznu jen to kolečko podél jednotkové kružnice a z toho si nakrelím ten graf frekvence/zisk_filtru a to mi ukáže, které frekvence filtr zesílí a které utlumí\na kreslí se to pomocí nul a pólů podle toho, jak jsou daleko od kružnice.\n\npointa kreslení je ta, že nula ve jmenovateli vyrábí nekonečno, které hodnotu na blízké části kružnice vytáhne hodně vysoko myšleno nula jako číslo, ne nula jako nula filtru a ta nula jako číslo se vyrábí tak, že hodnota \'z\' se kterou se procházíš podél kružnice je stejná jako příslušný pól, od kterého se odčítá.\n\n==Frekvenční charakteristika==\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/disk_syst/disk_syst.pdf str 23\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(1460,'(diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\n\'\'//Dobré je začít třeba s tím, k čemu se to dá použít -- odstranění aliasingu (low pass filtr -> hned doplníš i ty dva zbývající typy). Uvést nějaké pěkné vlastnosti, třeba tu, že je to lineární operace (teda, pokud vím), nakreslit si IIR a říct, jak z toho dostat rek. IIR, FIR. Co je to přenosová funkce a napsat jim ji tam a co udává, co do ní vstupuje -> tadá, jsi najednou u impulsní odezvy na Diracův , resp. Kroeneckerův impuls. Jak budeš u toho odvzování,tak zmíníš z-transformaci a výpočet H(z) dosazením za z = e^{j\\omega ?}, diferenční rovnici jako jiný zápis pro filtr. Mno a nakonec něco k vlastnostem filtru - nuly a póly, stabilitu.\n\'\'\n=Vata=\nNutno znát obecné vlastnosti systému (podle opilých panáčků) [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/syst_konv/syst_konv.pdf Panáčci] str 4 až 11. Pak následuje LTI systém.\n\n==Vlastnosti systému==\n# S pamětí a bez ní (zvláčtním případem systému bez paměti je drát)\n# Kauzalita\n# Stabilita\n# Časová invariantnost\n# Liearita\n\n==LTI Systémy==\n\nJsou lieární a časově invariantní\n\n\'\'Předpokládám, že jenom tyto systémy nás budou zajímat\'\'\n\nJejich nejdůležitější charakteristikou je impulzní odezva - tedy reakce na jednotkový signál. (Reakci na obecný signál získáme jeho rozložením na jednotkový signál a následným sečtením - platí pro spojití i diskrétní signály)\n\nToto sečtení se nazývá kovoluční suma nebo krátce komvoluce.\n\n===Konvoluce===\n\nKonvolucí získáme odezvu na jakýkoli vstup do systému podle jeho impulzní odezvy.\n\nVysvětleno ve slidech => následující obrázek\n[[Soubor:Konvoluce_text.png]]\n Na str 16 ve slidech je popsáno jak udělat kovoluci s proužkem papíru.\n\n===Spojité LTI systémy===\n\nPro převedení spojitého systému na jednotokový signál musíme využít funkce <m> delta_Delta </m> a \"silnéneho svěráku\". \n\nJak se mačká svěrák se dozvíme ve slidech na str 17 a 18.\n\nVýsledkem je, že u spojitého signálu potřebujeme znát a počítat s hodnotami v každém časovém okamžiku a proto se nebude jednat o konvoluční sumu, ale o integrál.\n\n<m>y(t) = int{-infty}{infty}{x(tau)h(t-tau)d tau}</m>\n\ntau je jen pomocná proměnná vyrobená z t, kvůli tomu ať přes ní můžeme integrovat.\nh(t - tau) bude otočené a posunuté do času t.\n\nKonvoluční sumu pak zapisujeme y(t) = x(t) * h(t).\n\n# Když spojujeme systémy tak je to operaci distributivní a komutativní (paralelně a sériově je spojujeme). (obr. str 24)\n\n# U systémů bez paměti má impulzní odezva jen jeden impulz v čase t=0 a rovná se Kx(t).\n\n\n# Kvůli kauzalitě se nesmí provádět konvoluce pro vzorky, které jsou v čase (t ři n) menší než nula. Vildělo by se do budoucna.\n\n# Stabilní - výstup je omezený když je omezený vstup.\n\n====Laplaceova transformace====\n\nhttp://cs.wikipedia.org/wiki/Laplaceova_transformace\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/spoj_syst/spoj_syst.pdf str 18\n\n===Diskrétní LTI systémy===\n\nFIR vs. IIR konečné a nekonečné\n\nKonečné mají zpětnou vazbu.\n\nOdezva IIR:\n\n[[Soubor:Odezva.png]]\n\n[[Soubor:FIRIIR.png]]\n\n====Z-transformace====\n\nPomůže popsat diskrétní signál pomocí komplexní proměnné z.\n\n=Main=\n# Číslicové filtry jsou systémy, které reagují na vstup spožděním, případně přidáají zpětnou vazbu a poskytují výstupní signál\n\n# Pomocí číslicových filtrů lze realizovat modely diskrétních systémů pomocí algoritmických a aritmetických operací. (z wiki)\n\n# Číslicový filtr je algoritmus nebo obvod, který mění spektrum vstupního diskrétního signálu. Může být realizován speciálním obvodem nebo programem pro počítač. V reálném čase musí filtr mezi dvěma vzorky provést výpočet konvoluce (filtr FIR); zde se často používají speciální obvody – signálové procesory. [http://www.rss.tul.cz/ftppub/cms/11_cisfiltry.pdf]\n\n==Diferenční rovnice==\n==Impulsní odezva==\nImpulzní odezva je to, co z filtru vyleze, když mu předhodíš jednotkový impulz\n==Přenosová funkce==\nPřenosová funkce říká, jaké frekvence filtr propouští a jaké ne.\n\nMartin Hyrš:\n\npřenosová funkce H(z) se získá z rovnic filtru, a funguje pro každé komplexní číslo. Když jí nakrmíš frekvence z jednotkové kružnice, získáš frekvenční charakteristiku filtru -- to je to, co nás u filtru zajímá. Jinak je to ten proces, kdy motorovou pilou vyřízneš kolečko z komplexních Krkonoš.\n\nH(z) žere jakékoliv komplexní číslo, mě ale zajímají jen skutečné frekvence, ktreré leží na jednotkové kružnici. Takže z celé komplexní funkce H(z) si vyříznu jen to kolečko podél jednotkové kružnice a z toho si nakrelím ten graf frekvence/zisk_filtru a to mi ukáže, které frekvence filtr zesílí a které utlumí\na kreslí se to pomocí nul a pólů podle toho, jak jsou daleko od kružnice.\n\npointa kreslení je ta, že nula ve jmenovateli vyrábí nekonečno, které hodnotu na blízké části kružnice vytáhne hodně vysoko myšleno nula jako číslo, ne nula jako nula filtru a ta nula jako číslo se vyrábí tak, že hodnota \'z\' se kterou se procházíš podél kružnice je stejná jako příslušný pól, od kterého se odčítá.\n\n==Frekvenční charakteristika==\n\nhttps://www.fit.vutbr.cz/study/courses/ISS/public/pred/disk_syst/disk_syst.pdf str 23\n\n\'\'Nebo taky kmitočtová charakteristika filtru\'\'\n\nkomplexní kmitočtová charakteristika je DTFT impulsní odezvy\n\nSe spočítá tak, že v označení filtru H(z) nahradíme z za <m> e^{j omega} </m>\n\n<m> H(e^{j omega}) = sum{k=0}{Q}{b_k e^{-j omega k}} / {1+sum{k=1}{P}{a_k e^{-j omega k}}}</m>\n\n=Shrnutí Černocký=\n\n15. Číslicové filtry (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika)\n\nTa otazka to celkem presne rika. Chci vedet:\n\n# jake jsou zakladni bloky cislicoveho filtru: zpozdeni, nasobeni, soucet.\n\n# jak vypada schema obecneho IIR filtru s nerekurzivni (koeficienty b) a rekurzivni casti (koeficienty a).\n\n# co z nej ustrihnout, aby se z nej stal FIR nebo ciste IIR filtr.\n\n# jak schema zapsat diferencni rovnici.\n\n# jak ji prevest na obrazovou formu (tedy jak ji z-transformovat): pomucka: konstanty zustanou konstanty, vsechna x[n] se prepisou na X(z), y[n] na Y(z) a kdyz je nekde zpozdeni o neco, musi se vyjadrit pomoci z^{-neco}\n\n# jak z toho udelat prenosovou funkci (reseni: chcete dostat podil Y(z)/X(z), vyjde Vam podil polynomu B(z)/A(z), kde citatel zavisi na vstupni casti, jmenovatel na vystupni).\n\n# jak z toho udelat kmitoctovou charakteristiku: nahradit z za e^{j omega}, kde omega je norm. kruh. frekvence... mimochodem (viz minula otazka), ted uz by Vam melo byt jasne, proc je frekv. charakteristika cisl. filtru periodicka s Fs\n\n# velice zhruba (bez rovnic) vedet, jak se frekv. charakteristika da spocitat nebo odhadnout rozlozenim citatele i jmenovatele na nuly a poly.upozorneni: toto si pod otazkami predstavuji ja jako garant a ucitel ISS, u statnic ale muzete potkat dalsi lidi, kteri temto vecem dobre rozumi (celkem kdokoliv z recove a graficke skupiny, Fucik, Sekanina, a mnozi dalsi) a ti mohou mit lehce odlisnou intepretaci. Naucenim vyse uvedeneho ale rozhodne neprohloupite.','utf-8'),(1461,'','utf-8'),(1462,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n====Normální formy====\n====Minimalizace Karnaughovy mapy====\n\n----\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.','utf-8'),(1463,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25, 32\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 08\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37 (10, 32)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1464,'== Odkazy ==\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25, 32\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 08\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37 (10, 32)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1465,'','utf-8'),(1466,'','utf-8'),(1467,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25, 32\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 08\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37 (10, 32)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1468,'','utf-8'),(1469,'V jedné z přednášek Kršek zmínil, že je dost ostuda, když neznáte jméno toho, kdo vás zkouší, tak bych tu udělala fotky a jména a popisy lidí co budou zkoušet. :D\n\n[http://www.fit.vutbr.cz/~kolar/]\n\n[http://www.fit.vutbr.cz/~drahan/.cs]\n\n[http://www.fit.vutbr.cz/~bartik/.cs]\n\n[http://www.fit.vutbr.cz/~strnadel/.cs]\n\n[http://www.fit.vutbr.cz/~szoke/.cs]','utf-8'),(1470,'V jedné z přednášek Kršek zmínil, že je dost ostuda, když neznáte jméno toho, kdo vás zkouší, tak bych tu udělala fotky a jména a popisy lidí co budou zkoušet. :D\n\n[http://www.fit.vutbr.cz/~kolar/|Kolář]\n\n[http://www.fit.vutbr.cz/~drahan/.cs|Drahanský]\n\n[http://www.fit.vutbr.cz/~bartik/.cs|Bartík]\n\n[http://www.fit.vutbr.cz/~strnadel/.cs|Strnadel]\n\n[http://www.fit.vutbr.cz/~szoke/.cs|Szoke]','utf-8'),(1471,'V jedné z přednášek Kršek zmínil, že je dost ostuda, když neznáte jméno toho, kdo vás zkouší, tak bych tu udělala fotky a jména a popisy lidí co budou zkoušet. :D\n\n[http://www.fit.vutbr.cz/~kolar/ Kolář]\n\n[http://www.fit.vutbr.cz/~drahan/.cs Drahanský]\n\n[http://www.fit.vutbr.cz/~bartik/.cs Bartík]\n\n[http://www.fit.vutbr.cz/~strnadel/.cs Strnadel]\n\n[http://www.fit.vutbr.cz/~szoke/.cs Szoke]','utf-8'),(1472,'','utf-8'),(1473,'','utf-8'),(1474,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\n\n----\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.','utf-8'),(1475,'== ZÁKLADNÍ POJMY ==\n\n• \'\'\'DATABÁZE\'\'\' (DB) - perzistentní data, využívaná aplikačními systémy dané instituce (v klasické databázi strukturovaná).\n\n• \'\'\'PERZISTENTNÍ DATA\'\'\' – data s dobou života překračující běh aplikačního programu i vypnutí počítače.\n\n• \'\'\'VLASTNOSTI DAT\'\'\' databáze:\n\n1) Integrovaná – úplně nebo částečně odstraněním redundance (úplným nebo částečným).\n\n2) Sdílená - typicky víceuživatelský přístup s případným omezením pohledu.\n\n3) Bezpečná - snadněji se realizuje omezení práv přístupu k datům\n\n4) Snadnější zajištění integrity dat (implementace integritních omezení).\n\n• \'\'\'INTEGRITA\'\'\' dat – správnost dat z hlediska splnění omezení (tzv. integritních omezení), která existují v reálném světě.\n\n• \'\'\'KONZISTENCE\'\'\' dat – nerozpornost dat (například není v databázi uložen dvakrát stejný klient s jinou adresou).\n\n• \'\'\'SŘBD\'\'\' (systém řízení báze dat) - programová vrstva řešící operace nad DB. Základní funkce:\n\n1) Definice dat, vytváření slovníku dat\n\n2) Manipulace s daty\n\n3) Zajištění bezpečnosti a integrity dat\n\n4) Zotavení po chybách a souběžný přístup - transakční zpracování (transakce je atomická)\n\n5) Zajištění co nejvyšší výkonnosti\n\n• \'\'\'DBS\'\'\' (databázový systém) - systém, který v širším pojetí zahrnuje:\n\n1) Technické prostředky\n\n2) Databázi - DB\n\n3) Programové vybavení - SŘBD, vývojové prostředky, knihovny…\n\n4) Uživatele DB (admin, aplikační programátor, znalý uživatel, naivní uživatel)\n\n• \'\'\'SCHÉMA DATABÁZE\'\'\' - metainformace popisující data v databázi (info o tabulkách, jejich sloupcích, omezeních...).\n\n• \'\'\'DATABÁZOVÝ JAZYK\'\'\' musí obsahovat:\n\n1) Specifikaci schématu databáze - jazyk pro definici dat (DDL - Data Definition Language) - výsledkem překladu příkazů jsou informace uložené v systémovém katalogu (slovníku dat) + případně vytvoření dané struktury.\n\n2) Manipulaci s daty v databázi - jazyk pro manipulaci s daty (DML - Data Manipulation Language) - poskytuje prostředky pro databázové operace (vyhledání, vkládání, modifikace, rušení) v daném datovém modelu.\n\n3) Další prostředky - pro řízení přístupu k datům, integritní omezeni - jazyk pro řízení dat (DCL - Data Control Language).\n\n• \'\'\'NEZÁVISLOST DAT\'\'\' - schopnost modifikovat definici schématu bez vlivu na schéma na vyšší úrovni. Úrovně nezávislosti:\n\n1) Fyzická nezávislost dat - schopnost modifikace fyzického schématu bez nutnosti přepsat aplikační programy (například vytvořeni efektivnější přístupové metody (index))\n\n2) Logická nezávislost dat - schopnost modifikovat logické schéma bez nutnosti přepsat aplikační programy (přidání sloupce tabulky).\n\n• Základní \'\'\'ÚROVNĚ ABSTRAKCE DAT\'\'\':\n\n1) Fyzická (interní) - popisuje data, jak jsou skutečně uložena.\n\n2) Konceptuální (logická) - popisuje jaká data jsou skutečně uložena v databázi a jaké vztahy mezi nimi existují.\n\n3) Úroveň pohledů (externí) – popisuje, jaká data vidí jednotliví uživatelé, tj. obecně pouze část databáze, která představuje data reprezentující objekty reálného světa, viditelná jednotlivými uživateli.\n\n• \'\'\'DATOVÝ MODEL\'\'\' - kolekce konceptuálních nástrojů pro popis objektů reality (data, vztahy mezi nimi, sémantika a integritní omezení). Rozdělení podle úrovně modelování:\n\n1) Logické modely - popisují data na úrovni konceptuální a pohledů: \nModelování objektů reálného světa (ER model, OO model, funkcionální model...) – konceptuální modelování.\n\nDatabázové modely definující logickou organizaci dat v databázi (relační, síťový, hierarchický, OO, objektově relační…).\n\n2) Modely fyzických dat – popisují data na fyzické úrovni.\n\n• Základní PROGRAMOVÉ VRSTVY databázové aplikace:\n\n1) Procesy na popředí (frontend, klient) – část aplikace využívající SŘBD.\n\n2) Procesy na pozadí (backend, server) – část aplikace realizující všechny základní funkce SŘBD.\n\n----\n\n==== NORMÁLNÍ FORMA ====\n\n1) 1NF: Každý atribut obsahuje pouze atomické hodnoty.\n\n2) 2NF: Každý neklíčový atribut je plně závislý na primárním klíči.\n\n3) 3NF: Všechny neklíčové atributy musí být vzájemně nezávislé.\n\n4) BCNF: Atributy, které jsou součástí primárního klíče, musí být vzájemně nezávislé.\n\n5) 4NF: Relace popisuje pouze příčinnou souvislost mezi klíčem a atributy.\n\n6) 5NF: Relaci již není možno bezeztrátově rozložit.\n\n• Pro splnění určité normální formy je nutné splnit i ty předchozí. V praxi se obvykle používají pouze první tři.\n\n----\n\n== KONCEPTUÁLNÍ MODELOVÁNÍ ==\n\n[[Soubor:32_01.PNG]]\n\n• Fáze datové, případně objektové analýzy využívající modelů založených na objektech aplikační domény.\n\n• Přístupy:\n\nStrukturovaný (klasický) - východiskem pro návrh databáze je ER model.\n\nObjektově-orientovaný - východiskem pro návrh databáze je diagram tříd.\n\n==== ER ====\n\n• ER model je založen na chápání světa jako množiny základních objektů:\n\n1) ENTITA (Entity) - „věc“ nebo objekt reálného světa rozlišitelný od jiných objektů, o němž chceme mít informace v DB.\n\n2) VZTAH (Relationship) mezi entitami (STUPEŇ vztahu je na obrázku).\n\n[[Soubor:32_03.PNG]]\n\n[[Soubor:32_04.PNG]]\n\n• Popisuje data \"v klidu\", neukazuje, jaké operace s daty budou probíhat. Někdy se označuje také jako ERA – třetím základním prvkem modelu jsou atributy (Attributes).\n\n• ENTITNÍ MNOŽINA - množina entit téhož typu, které sdílí tytéž vlastnosti neboli atributy.\n\n• ATRIBUT - vlastnost entity, která nás v kontextu daného problému zajímá a jejíž hodnotu chceme mít v DB uloženu. Jednoduché (login)/ složené (adresa), jednohodnotové (rodné číslo)/vícehodnotové (telefonní čísla), povolující NULL.\n\n[[Soubor:32_07.PNG]]\n\n• DOMÉNA ATRIBUTU - obor hodnot atributu.\n\n• VZTAHOVÁ MNOŽINA - množina vztahů téhož typu, které sdílí tytéž vlastnosti.\n\n• IDENTIFIKÁTOR (primární klíč) entitní nebo vztahové množiny – atribut, jehož hodnota je v rámci dané množiny jednoznačná a neredukovatelná (v případě složeného atributu – viz dále).\n\n• KARDINALITA (maximální kardinalita) - maximální počet vztahů daného typu (vztahové množiny), ve kterých může participovat jedna entita (1,M, případně přesněji). - vlastnost konce vztahu, tj. určujeme pro každý konec.\n\n[[Soubor:32_05.PNG]]\n\n• ČLENSTVÍ (také členství, minimální kardinalita) vyjadřuje minimální počet vztahů daného typu (vztahové množiny), ve kterých musí participovat jedna entita (0 – volitelné/1 – povinné).\n \n[[Soubor:32_06.PNG]]\n\n• Síla množiny:\n\n1) Silná (strong) množina –může existovat nezávisle na ostatních.\n\n2) Slabá množina – je závislá na jiné entitní množině (pouze jedné tzv. dominantní) a je pomocí ní identifikována, tj. identifikátor obsahuje identifikátor dominantní množiny.\n\n[[Soubor:32_08.PNG]]\n\n• Generalizace/specializace (dědičnost).\n\n[[Soubor:32_09.PNG]]\n\n====== TVORBA ER ======\n\n1) Jména - srozumitelná, vyjadřující význam entitních a vztahových množin (entitní - podstatná jm., vztahové - slovesa, předložky)\n\n2) Několik různých vztahových množin mezi stejnými entitními - nutno použít jméno vztahové množiny nebo jméno role.\n\n[[Soubor:32_10.PNG]]\n\n3) Celkový systém by neměl být zahrnut do ERD (banka, škola…).\n\n4) Entitní množina nebo atribut? Je-li hodnota atributu důležitá, i když neexistuje žádná entita s touto hodnotou jako vlastností, pak bychom ji měli modelovat jako entitu.\n\n[[Soubor:32_11.PNG]]\n\n5) Náhrada vztahů M:M vazební entitní množinou\n\n[[Soubor:32_12.PNG]]\n\n====== TRANSFORMACE ER NA TABULKY RELAČNÍ DATABÁZE ======\n\n1) Odstranění složených a vícehodnotových atributů (převod do 1NF – 1. Normální forma).\n\nA - Ze složeného atributu vytvoříme několik jednoduchých.\n\n[[Soubor:32_13.PNG]]\n\nB - Vícehodnotový atribut nahradíme další entitní množinou nebo pevným počtem opakování.\n\n[[Soubor:32_14.PNG]]\n \n2) Reprezentace silné entitní množiny tabulkou s primárním klíčem PK.\n\n[[Soubor:32_15.PNG]]\n\n3) Reprezentace vztahů uložením cizího klíče CK ukazujícího na záznam z jedné do druhé tabulky. \n\n[[Soubor:32_16.PNG]]\n\n4) Reprezentace slabé entitní množiny (do tabulky jako silná, ale funguje vztah 1:M).\n \n[[Soubor:32_17.PNG]]\n\n5) Reprezentace ternárních vztahů vytvořením tabulky navíc reprezentující pouze vztah.\n\n[[Soubor:32_18.PNG]] \n\n6) Generalizace/specializace – možnosti řešení:\n\nTabulka pro nadtyp + pro podtypy s primárním klíčem nadtypu.\n\nPouze tabulky pro podtypy i s atributy nadtypu.\n\nJedna tabulka pro nadtyp a druhá pro oba podtypy.\n\nVšechno v jedné tabulce - rozlišení podle prázdné hodnoty nebo tzv. diskriminátoru.\n\n----\n\n== NÁVRH DATABÁZE ==\n\n==== PROHLÁŠENÍ O CÍLECH (STATEMENT OF OBJECTIVES) ====\n\n• Specifikuje uživatel. Není a nemusí být zcela přesné, je neformální. Je to popis představy o tom, co by měl systém dělat.\n\n• Z obchodního hlediska je prohlášení o cílech základním materiálem vznikajícím u uživatele, kde zcela neformálně popíše, co potřebuje.\n\n==== SPECIFIKAČNÍ DOKUMENT (REQUIREMENT DOCUMENT) ====\n\n• Popisuje detailně, co si představujeme, že systém bude provádět, nikoliv jak to bude provádět – požadavky na systém.\n\n==== NÁVRHOVÝ DOKUMENT ====\n\n• V návrhovém dokumentu popisujeme, jakým způsobem bude splněna specifikace. \n\n• Uživateli návrhového dokumentu jsou: pracovní skupina pro kódování, pracovní skupina pro kontrolu kvality a pracovní skupina pro údržbu.\n\n==== OPONENTURA SYSTÉMU ====\n\n• Jakmile se proces návrhu blíží ke konci, je často prováděna formální oponentura nebo verifikace, při které participují všichni členové návrhové a kontrolní skupiny, případně i externí oponenti.\n\n==== TESTOVACÍ PLÁN ====\n\n• Testy modulů, prováděné kodéry každého individuálního modulu předtím, než je modul poskytnut k integraci do systému.\n\n• Integrační testy, prováděné skupinou, která integruje moduly do systému.\n\n• Množinu QA testů, prováděných skupinou sledující kvalitu kompletně integrovaného systému.\n\n1) TESTY ČERNÉ SKŘÍNKY jsou navrhovány podle Specifikačního dokumentu, bez nahlížení do Návrhového dokumentu a kódu. Předpokládají, že systém je černá skřínka a není vidět dovnitř. Cílem je verifikovat, že systém splňuje specifikace.\n\n2) TESTY SKLENĚNÉ SKŘÍNKY jsou navrhovány s použitím Návrhového dokumentu a kódu. Jsou nazývány testy skleněné skřínky, protože nahlížejí dovnitř do systému. Cílem je verifikovat, zda detailní kódovaní je správné.\n\n3) Zátěžové testy\n\n4) Akceptační a beta testování\n\n==== PLÁNOVÁNÍ PROJEKTU ====\n\n• Ganttův diagram\n\n• Diagram přiřazení řešitelů - diagram z vodorovných čar zobrazujících přiřazení jednotlivých řešitelů konkrétním úkolům společně s časy počátků a konce úkolů a trvání úkolů.\n\n==== DALŠÍ FÁZE ====\n\n• Vytvoření kódu\n\n• Případné uplatnění nějaké cyklické metody vývoje SW\n\n• Uvedení do provozu\n\n[[Soubor:32_02.PNG]]','utf-8'),(1476,'','utf-8'),(1477,'','utf-8'),(1478,'','utf-8'),(1479,'','utf-8'),(1480,'','utf-8'),(1481,'','utf-8'),(1482,'','utf-8'),(1483,'','utf-8'),(1484,'','utf-8'),(1485,'','utf-8'),(1486,'','utf-8'),(1487,'','utf-8'),(1488,'','utf-8'),(1489,'','utf-8'),(1490,'','utf-8'),(1491,'','utf-8'),(1492,'','utf-8'),(1493,'','utf-8'),(1494,'== ZÁKLADNÍ POJMY ==\n\n• \'\'\'DATABÁZE\'\'\' (DB) - perzistentní data, využívaná aplikačními systémy dané instituce (v klasické databázi strukturovaná).\n\n• \'\'\'PERZISTENTNÍ DATA\'\'\' – data s dobou života překračující běh aplikačního programu i vypnutí počítače.\n\n• \'\'\'VLASTNOSTI DAT\'\'\' databáze:\n\n1) Integrovaná – úplně nebo částečně odstraněním redundance (úplným nebo částečným).\n\n2) Sdílená - typicky víceuživatelský přístup s případným omezením pohledu.\n\n3) Bezpečná - snadněji se realizuje omezení práv přístupu k datům\n\n4) Snadnější zajištění integrity dat (implementace integritních omezení).\n\n• \'\'\'INTEGRITA\'\'\' dat – správnost dat z hlediska splnění omezení (tzv. integritních omezení), která existují v reálném světě.\n\n• \'\'\'KONZISTENCE\'\'\' dat – nerozpornost dat (například není v databázi uložen dvakrát stejný klient s jinou adresou).\n\n• \'\'\'SŘBD\'\'\' (systém řízení báze dat) - programová vrstva řešící operace nad DB. Základní funkce:\n\n1) Definice dat, vytváření slovníku dat\n\n2) Manipulace s daty\n\n3) Zajištění bezpečnosti a integrity dat\n\n4) Zotavení po chybách a souběžný přístup - transakční zpracování (transakce je atomická)\n\n5) Zajištění co nejvyšší výkonnosti\n\n• \'\'\'DBS\'\'\' (databázový systém) - systém, který v širším pojetí zahrnuje:\n\n1) Technické prostředky\n\n2) Databázi - DB\n\n3) Programové vybavení - SŘBD, vývojové prostředky, knihovny…\n\n4) Uživatele DB (admin, aplikační programátor, znalý uživatel, naivní uživatel)\n\n• \'\'\'SCHÉMA DATABÁZE\'\'\' - metainformace popisující data v databázi (info o tabulkách, jejich sloupcích, omezeních...).\n\n• \'\'\'DATABÁZOVÝ JAZYK\'\'\' musí obsahovat:\n\n1) Specifikaci schématu databáze - jazyk pro definici dat (DDL - Data Definition Language) - výsledkem překladu příkazů jsou informace uložené v systémovém katalogu (slovníku dat) + případně vytvoření dané struktury.\n\n2) Manipulaci s daty v databázi - jazyk pro manipulaci s daty (DML - Data Manipulation Language) - poskytuje prostředky pro databázové operace (vyhledání, vkládání, modifikace, rušení) v daném datovém modelu.\n\n3) Další prostředky - pro řízení přístupu k datům, integritní omezeni - jazyk pro řízení dat (DCL - Data Control Language).\n\n• \'\'\'NEZÁVISLOST DAT\'\'\' - schopnost modifikovat definici schématu bez vlivu na schéma na vyšší úrovni. Úrovně nezávislosti:\n\n1) Fyzická nezávislost dat - schopnost modifikace fyzického schématu bez nutnosti přepsat aplikační programy (například vytvořeni efektivnější přístupové metody (index))\n\n2) Logická nezávislost dat - schopnost modifikovat logické schéma bez nutnosti přepsat aplikační programy (přidání sloupce tabulky).\n\n• Základní \'\'\'ÚROVNĚ ABSTRAKCE DAT\'\'\':\n\n1) Fyzická (interní) - popisuje data, jak jsou skutečně uložena.\n\n2) Konceptuální (logická) - popisuje jaká data jsou skutečně uložena v databázi a jaké vztahy mezi nimi existují.\n\n3) Úroveň pohledů (externí) – popisuje, jaká data vidí jednotliví uživatelé, tj. obecně pouze část databáze, která představuje data reprezentující objekty reálného světa, viditelná jednotlivými uživateli.\n\n• \'\'\'DATOVÝ MODEL\'\'\' - kolekce konceptuálních nástrojů pro popis objektů reality (data, vztahy mezi nimi, sémantika a integritní omezení). Rozdělení podle úrovně modelování:\n\n1) Logické modely - popisují data na úrovni konceptuální a pohledů: \nModelování objektů reálného světa (ER model, OO model, funkcionální model...) – konceptuální modelování.\n\nDatabázové modely definující logickou organizaci dat v databázi (relační, síťový, hierarchický, OO, objektově relační…).\n\n2) Modely fyzických dat – popisují data na fyzické úrovni.\n\n• Základní PROGRAMOVÉ VRSTVY databázové aplikace:\n\n1) Procesy na popředí (frontend, klient) – část aplikace využívající SŘBD.\n\n2) Procesy na pozadí (backend, server) – část aplikace realizující všechny základní funkce SŘBD.\n\n----\n\n==== NORMÁLNÍ FORMA ====\n\n1) 1NF: Každý atribut obsahuje pouze atomické hodnoty.\n\n2) 2NF: Každý neklíčový atribut je plně závislý na primárním klíči.\n\n3) 3NF: Všechny neklíčové atributy musí být vzájemně nezávislé.\n\n4) BCNF: Atributy, které jsou součástí primárního klíče, musí být vzájemně nezávislé.\n\n5) 4NF: Relace popisuje pouze příčinnou souvislost mezi klíčem a atributy.\n\n6) 5NF: Relaci již není možno bezeztrátově rozložit.\n\n• Pro splnění určité normální formy je nutné splnit i ty předchozí. V praxi se obvykle používají pouze první tři.\n\n----\n\n== KONCEPTUÁLNÍ MODELOVÁNÍ ==\n\n[[Soubor:32_01.PNG]]\n\n• Fáze datové, případně objektové analýzy využívající modelů založených na objektech aplikační domény.\n\n• Přístupy:\n\nStrukturovaný (klasický) - východiskem pro návrh databáze je ER model.\n\nObjektově-orientovaný - východiskem pro návrh databáze je diagram tříd.\n\n==== ER ====\n\n• ER model je založen na chápání světa jako množiny základních objektů:\n\n1) ENTITA (Entity) - „věc“ nebo objekt reálného světa rozlišitelný od jiných objektů, o němž chceme mít informace v DB.\n\n2) VZTAH (Relationship) mezi entitami (STUPEŇ vztahu je na obrázku).\n\n[[Soubor:32_04.PNG]]\n\n• Popisuje data \"v klidu\", neukazuje, jaké operace s daty budou probíhat. Někdy se označuje také jako ERA – třetím základním prvkem modelu jsou atributy (Attributes).\n\n• ENTITNÍ MNOŽINA - množina entit téhož typu, které sdílí tytéž vlastnosti neboli atributy.\n\n• ATRIBUT - vlastnost entity, která nás v kontextu daného problému zajímá a jejíž hodnotu chceme mít v DB uloženu. Jednoduché (login)/ složené (adresa), jednohodnotové (rodné číslo)/vícehodnotové (telefonní čísla), povolující NULL.\n\n[[Soubor:32_07.PNG]]\n\n• DOMÉNA ATRIBUTU - obor hodnot atributu.\n\n• VZTAHOVÁ MNOŽINA - množina vztahů téhož typu, které sdílí tytéž vlastnosti.\n\n[[Soubor:32_03.PNG]]\n\n• IDENTIFIKÁTOR (primární klíč) entitní nebo vztahové množiny – atribut, jehož hodnota je v rámci dané množiny jednoznačná a neredukovatelná (v případě složeného atributu – viz dále).\n\n• KARDINALITA (maximální kardinalita) - maximální počet vztahů daného typu (vztahové množiny), ve kterých může participovat jedna entita (1,M, případně přesněji). - vlastnost konce vztahu, tj. určujeme pro každý konec.\n\n[[Soubor:32_05.PNG]]\n\n• ČLENSTVÍ (také členství, minimální kardinalita) vyjadřuje minimální počet vztahů daného typu (vztahové množiny), ve kterých musí participovat jedna entita (0 – volitelné/1 – povinné).\n \n[[Soubor:32_06.PNG]]\n\n• Síla množiny:\n\n1) Silná (strong) množina –může existovat nezávisle na ostatních.\n\n2) Slabá množina – je závislá na jiné entitní množině (pouze jedné tzv. dominantní) a je pomocí ní identifikována, tj. identifikátor obsahuje identifikátor dominantní množiny.\n\n[[Soubor:32_08.PNG]]\n\n• Generalizace/specializace (dědičnost).\n\n[[Soubor:32_09.PNG]]\n\n====== TVORBA ER ======\n\n1) Jména - srozumitelná, vyjadřující význam entitních a vztahových množin (entitní - podstatná jm., vztahové - slovesa, předložky)\n\n2) Několik různých vztahových množin mezi stejnými entitními - nutno použít jméno vztahové množiny nebo jméno role.\n\n[[Soubor:32_10.PNG]]\n\n3) Celkový systém by neměl být zahrnut do ERD (banka, škola…).\n\n4) Entitní množina nebo atribut? Je-li hodnota atributu důležitá, i když neexistuje žádná entita s touto hodnotou jako vlastností, pak bychom ji měli modelovat jako entitu.\n\n[[Soubor:32_11.PNG]]\n\n5) Náhrada vztahů M:M vazební entitní množinou\n\n[[Soubor:32_12.PNG]]\n\n====== TRANSFORMACE ER NA TABULKY RELAČNÍ DATABÁZE ======\n\n1) Odstranění složených a vícehodnotových atributů (převod do 1NF – 1. Normální forma).\n\nA - Ze složeného atributu vytvoříme několik jednoduchých.\n\n[[Soubor:32_13.PNG]]\n\nB - Vícehodnotový atribut nahradíme další entitní množinou nebo pevným počtem opakování.\n\n[[Soubor:32_14.PNG]]\n \n2) Reprezentace silné entitní množiny tabulkou s primárním klíčem PK.\n\n[[Soubor:32_15.PNG]]\n\n3) Reprezentace vztahů uložením cizího klíče CK ukazujícího na záznam z jedné do druhé tabulky. \n\n[[Soubor:32_16.PNG]]\n\n4) Reprezentace slabé entitní množiny (do tabulky jako silná, ale funguje vztah 1:M).\n \n[[Soubor:32_17.PNG]]\n\n5) Reprezentace ternárních vztahů vytvořením tabulky navíc reprezentující pouze vztah.\n\n[[Soubor:32_18.PNG]] \n\n6) Generalizace/specializace – možnosti řešení:\n\nTabulka pro nadtyp + pro podtypy s primárním klíčem nadtypu.\n\nPouze tabulky pro podtypy i s atributy nadtypu.\n\nJedna tabulka pro nadtyp a druhá pro oba podtypy.\n\nVšechno v jedné tabulce - rozlišení podle prázdné hodnoty nebo tzv. diskriminátoru.\n\n----\n\n== NÁVRH DATABÁZE ==\n\n==== PROHLÁŠENÍ O CÍLECH (STATEMENT OF OBJECTIVES) ====\n\n• Specifikuje uživatel. Není a nemusí být zcela přesné, je neformální. Je to popis představy o tom, co by měl systém dělat.\n\n• Z obchodního hlediska je prohlášení o cílech základním materiálem vznikajícím u uživatele, kde zcela neformálně popíše, co potřebuje.\n\n==== SPECIFIKAČNÍ DOKUMENT (REQUIREMENT DOCUMENT) ====\n\n• Popisuje detailně, co si představujeme, že systém bude provádět, nikoliv jak to bude provádět – požadavky na systém.\n\n==== NÁVRHOVÝ DOKUMENT ====\n\n• V návrhovém dokumentu popisujeme, jakým způsobem bude splněna specifikace. \n\n• Uživateli návrhového dokumentu jsou: pracovní skupina pro kódování, pracovní skupina pro kontrolu kvality a pracovní skupina pro údržbu.\n\n==== OPONENTURA SYSTÉMU ====\n\n• Jakmile se proces návrhu blíží ke konci, je často prováděna formální oponentura nebo verifikace, při které participují všichni členové návrhové a kontrolní skupiny, případně i externí oponenti.\n\n==== TESTOVACÍ PLÁN ====\n\n• Testy modulů, prováděné kodéry každého individuálního modulu předtím, než je modul poskytnut k integraci do systému.\n\n• Integrační testy, prováděné skupinou, která integruje moduly do systému.\n\n• Množinu QA testů, prováděných skupinou sledující kvalitu kompletně integrovaného systému.\n\n1) TESTY ČERNÉ SKŘÍNKY jsou navrhovány podle Specifikačního dokumentu, bez nahlížení do Návrhového dokumentu a kódu. Předpokládají, že systém je černá skřínka a není vidět dovnitř. Cílem je verifikovat, že systém splňuje specifikace.\n\n2) TESTY SKLENĚNÉ SKŘÍNKY jsou navrhovány s použitím Návrhového dokumentu a kódu. Jsou nazývány testy skleněné skřínky, protože nahlížejí dovnitř do systému. Cílem je verifikovat, zda detailní kódovaní je správné.\n\n3) Zátěžové testy\n\n4) Akceptační a beta testování\n\n==== PLÁNOVÁNÍ PROJEKTU ====\n\n• Ganttův diagram\n\n• Diagram přiřazení řešitelů - diagram z vodorovných čar zobrazujících přiřazení jednotlivých řešitelů konkrétním úkolům společně s časy počátků a konce úkolů a trvání úkolů.\n\n==== DALŠÍ FÁZE ====\n\n• Vytvoření kódu\n\n• Případné uplatnění nějaké cyklické metody vývoje SW\n\n• Uvedení do provozu\n\n[[Soubor:32_02.PNG]]','utf-8'),(1495,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 08\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 09 (08, 25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 (10)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1496,'','utf-8'),(1497,'','utf-8'),(1498,'','utf-8'),(1499,'','utf-8'),(1500,'','utf-8'),(1501,'','utf-8'),(1502,'','utf-8'),(1503,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.','utf-8'),(1504,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n \nRELAČNÍ KALKUL\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n---\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1505,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n \nRELAČNÍ KALKUL\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1506,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]]\n \n====== RELAČNÍ KALKUL ======\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1507,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]]\n \n====== RELAČNÍ KALKUL ======\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1508,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]]\n \n====== RELAČNÍ KALKUL ======\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n[[Soubor:33_06.PNG]]\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1509,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n\n===Metoda Quine McCluskey===\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.','utf-8'),(1510,'Logické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.','utf-8'),(1511,'=====Úvod======\nLogické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.\n\n----\n\n\n===Metoda Quine McCluskey===','utf-8'),(1512,'======Úvod======\nLogické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.\n\n----\n\n\n===Metoda Quine McCluskey===','utf-8'),(1513,'','utf-8'),(1514,'','utf-8'),(1515,'','utf-8'),(1516,'','utf-8'),(1517,'','utf-8'),(1518,'','utf-8'),(1519,'','utf-8'),(1520,'======Úvod======\nLogické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.\n\n----\n\n\n===Metoda Quine-McCluskey===\nJe to tabulární metoda, je vhodná i pro funkce více než 5-6 proměnných kde Karnaughovy mapy selhávají, a pro minimalizaci obvodů s více výstupy.\n\n\'\'\'Pro úplnou normální disjunktní formu je postup tento:\'\'\'\n\n\'\'\'1)\'\'\' Vypíšeme si hodnotu všech kombinací proměnných, kde je výstup 1. Konkrétním proměnným musíme přiřadit váhu, aby tuto hodnotu bylo možno určit (např. když máme 4 proměnné, tak hodnota bude reprezentována jako wxyz).\n\n[[Soubor:Qmc1.png]]\n\n----\n\n\'\'\'2)\'\'\' Tato čísla seřadíme do skupin podle počtu jedniček v binární verzi hodnot proměnných (a v rámci dané skupiny se seřadí podle jejich vah.\n\n[[Soubor:Qmc2.png]]\n\n----\n\n\'\'\'3)\'\'\' Hledáme skupiny sousedních implikantů tak, že mezi sousedícími skupinami hledáme dvojice, u kterých je možné některou z proměnných zanedbat (a znovu je zapíšeme do tabulky). V tabulce označíme eliminovanou proměnnou pomlčkou.\n\n[[Soubor:Qmc3.png]]\n\n----\n\n\'\'\'4)\'\'\' Provedeme druhou iteraci a snažíme se eliminovat proměnnou z již zkrácených implikantů. Pokud to půjde, tak potom můžeme zkusit provést ještě jednu iteraci.\n\n[[Soubor:Qmc4.png]]\n\n----\n\n\'\'\'5)\'\'\' Nyní máme několik zkrácených implikantů, které nám však několikanásobně pokrývají vrcholy funkce. Proto je znázorníme v \'\'\'mřízce implikantů\'\'\' a hledáme co nejmenší počet zkrácených implikantů pokrývajících všechny vrcholy. Může existovat více řešení.\n\n[[Soubor:Qmc5.png]]\n\n----\n\n\'\'\'6)\'\'\' Nejprve musíme zahrnout nesporné implikanty (ty, které nemůžeme pokrýt ničím jiným, třeba tady PI1 jako jediné pokrývá 9, a PI7 15). Zbývá několik vrcholů, které lze pokrýt různým způsobem.\n\n[[Soubor:Qmc6.png]]\n\n----\n\n\'\'\'7)\'\'\' Pomocí zvolených implikantů vyjádříme řešení.\n\n[[Soubor:Qmc7.png]]\n\n----','utf-8'),(1521,'','utf-8'),(1522,'','utf-8'),(1523,'','utf-8'),(1524,'','utf-8'),(1525,'======Úvod======\nLogické funkce se nejčastěji zapisují pomocí:\n# Logické funkce\n# Pravdivostní tabulky\n# Karnaughovy mapy\n\n----\n\n===Logické funkce===\nPro minimalizaci logických výrazů (funkcí) se používá \'\'\'Booleova algebra\'\'\'. V Booleově algebře jsou definovány 3 základní operace:\n# \'\'\'Negace\'\'\' - 0\'=1, 1\'=0\n# \'\'\'Logický součin\'\'\' - Y=A.B\n# \'\'\'Logický součet\'\'\' - Y=A+B\n\nBooleova algebra má několik základních zákonů a pravidel. Avšak ještě predtím, než vám něco nebude dávat smysl a zabijete tím půlku dopoledne, tak upozorňuju, že se u + se jedná vždy o \'\'\'logický součet, tedy OR\'\'\'. U násobení se jedná o \'\'\'logický součin, tedy AND.\'\'\'\n\n# + = OR\n# . = AND\n\n[[Soubor:Or.png]]\n\nZ tabulky vidíme že potom i 1+1=1. Logický součin dává smysl i bez tabulky, protože vychází stejně.\n\n[[Soubor:And.png]]\n\nV booleově algebře platí také:\n# \'\'\'komutativní zákon\'\'\' - můžeme přehazovat pořadí operandů (A+B = B+A, A.B = B.A)\n# \'\'\'asociatovní zákon\'\'\' - můžeme to libovolně závorkovat, když tam máme stejnou operaco (A.(B.C) = (A.B).C, A+(B+C) = (A+B)+C)\n# \'\'\'distrubutivní zákon\'\'\' - A+(B.C) = (A+B).(A+C), A.(B+C) = A.B+A.C\n\nVětšina dalších pravidel se dá bez problémů odvodit čistě díky znalosti operací AND a OR, a jsou blíže ppsány v \'\'\'otázce 19\'\'\'. Pro potřeby mnimalizace logických výrazů jsou však důležité především \'\'\'De Morganovy zákony\'\'\'. Ty jsou dva, a jejich účelem je možnost převádět v logické funkci AND na OR a naopak.\n\n[[Soubor:Demorg.png]]\n\n\'\'\'Příklad:\'\'\'\n\n[[Soubor:Bool.png]]\n\nV takovém případě by jsme pro realizaci obvodu potřebovali dvě hradla AND a jedno OR. Použitím De Morganova vzorce, který lze z \'\'\'(A+B)\' = A\'.B\' \'\'\' upravit na \'\'\'A+B = (A\'.B\')\' \'\'\', můžeme získaný vztah dále upravit na:\n# \'\'\'Y = A.C+A.B = ((A.C)\'.(A.B)\')\' \'\'\'\n\nTeď už danou logickou funkcni je bez problému možné realizovat jako obvod pomocí tří hradel NAND.\n\n----\n\n===Pravdivostní tabulka===\nPravdivostní tabulka představuje způsob zápisu logických funkcí, který se vzhledem ke snadné čitelnosti používá pro vyjádření logické funkce u kombinačních logických obvodů velmi často. definuje logickou funkci tak, že \npro všechny kombinace hodnot vstupních proměnných jsou v tabulce uvedeny hodnoty dané funkce.\n\nPravdivostní tabulka obsahuje ve sloupcích všechny vstupní logické proměnné (vlevo) a výstupní logickou funkci, příp. více funkcí (vpravo). Máme-li tedy n vstupních proměnných a m výstupních funkcí, tabulka bude mít n+m sloupců.\n\nPočet řádků pravdivostní tabulky odpovídá počtu všech možných kombinací hodnot vstupních proměnných. Protože vstupní proměnné mohou nabývat pouze dvou hodnot – log. 0 nebo log. 1, bude mít tabulka 2n řádků. V každém řádku pravdivostní tabulky musí být jiná kombinace hodnot vstupních proměnných a ve sloupcích, které odpovídají výstupním logickým funkcím, musí být pro každou tuto kombinaci uvedeno příslušné pravdivostní ohodnocení.\n\nJednotlivé proměnné je vhodné uspořádat do tzv. \'\'\'normální báze\'\'\', kdy jsou jednotlivým proměnným přiřazeny váhy mocnin základu (báze) 2 (tedy hodnoty 4, 2, 1 pro proměnné x, y, z). Znamená to, že kombinaci hodnot vstupních proměnných obvykle zapisujeme takovým způsobem, aby jejich binární hodnota odpovídala číslu daného řádku v pravdivostní tabulce, pokud bychom řádky číslovali od nuly (tj. např. v případě dvou proměnných by na jednotlivých řádcích byly kombinace: 00, 01, 10, 11).\n\n----\n\n===Karnaughova mapa===\nJe to upořádání matice, ve kterém jsou sousedním políčkům přiřazené sousední kombinace vstupních stavů (ony stavy se od sebe liší pouze v jedné proměnné).\n\n[[Soubor:Mapa1.png]]\n\nV buňkách pod pruhem má daná proměnná hodnotu logická 1, a mimo něj log.0. Buňky si též můžeme označit binárním kódem odpovídajícím jednotlivým kombinacím vstupních proměnných. Existuje více ekvivalentních řešení, kdy budou proměnné umístěny na různých hranách krychle. Důležité je dodržet \'\'\'boolovskou sousednost\'\'\' pro jednotlivé buňky.\n\n[[Soubor:Karnaugh1.png]]\n\nPro hledání kontrétní funkce však do buněk napíšeme hodnoty výstupu z pravdivostní tabulky na základě konkrétní kombinace vstupních proměnných.\n\n----\n\n====Normální formy====\nDle způsobu zápisu výrazu a stupně minimalizace (některá proměnná je eliminována) dané log. funkce rozlišujeme několik různých forem. Nejprve je však nutné objasnit následující pojmy:\n\n======Minterm======\nMinterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n mintermů. Minterm je logickým součinem vstupních proměnných a je pravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Minterm.png]]\n\n======Maxterm======\nMaxterm je speciální produkt literálů,ve kerém se každá vstupní proměnná vyskytuje právě jednou. Funkce s n proměnnými bude mít 2^n maxtermů. Maxterm je logickým součtem vstupních proměnných a je nepravdivý vždy pro právě jednu kombinaci vstupních hodnot.\n\n[[Soubor:Maxterm.png]]\n\n----\n\n=====Normální disjunktní formy=====\nDisjunktní formy se tvoří součtem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.1.\n\n======Úplná normální disjunktní forma======\nJedná se o součet mintermů, kdy funkce nabývá log. 1. Pro každou funkcni existuje právě jedná úplná normální disjunktní forma.\n\n[[Soubor:Mintermform.png]]\n\n======Zkrácená normální disjunktní forma======\nVýraz je opět zapsán jako součet (suma) termů tvořených součinem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNDF.\n\n======Minimální normální disjunktní forma======\nSoučet součinových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNDF.\n\n----\n\n=====Normální konjunktní formy=====\nKonjunktní formy se tvoří součinem těch literálů tvořených ze vstupních proměnných, při kterých funkce nabývá hodnoty log.0.\n\n======Úplná normální konjunktní forma======\nJedná se o součin maxtermů, kdy funkce nabývá log. o1. Pro každou funkci existuje právě jedná úplná normální konjunktní forma.\n\n[[Soubor:Maxtermform.png]]\n\n======Zkrácená normální konjunktní forma======\nVýraz je opět zapsán jako součin termů tvořených součtem, ale v některých termech nejsou přítomny všechny proměnné dané funkce. Nekteré proměnné byly eliminovány a tím pádem výsledná funkce částečně minimalizována. Pro danou logickou funkcni může existovat více ZNKF.\n\n======Minimální normální konjunktní forma======\nSoučin součtových termů, který je zapsán tak, že z žádného termu již nelze eliminovat žádnou proměnnou dané log. funkce. Znamená to tedy, že byly eliminovány všechny proměnné, které bylo možno odstranit, aniž by se změnila daná funkce. Pro danou log. funkci může existovat více MNKF.\n\n----\n\n====Minimalizace Karnaughovy mapy====\nV rámci minimalizace Karnaughových map se sdružují bunky se stejnou hodnotou. Je možné združovat pouze 2,4,8 buněk (takže mocniny dvou, teda jich nemůžeme sdružit 6, ale dát to jako 4+2). Jednička je také mocninou 2, kdyby to nešlo s něčím sdružit. Je možné sdružovat i přes hrany.\n\n=====Minimalizace disjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.1. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z disjunktních forem (tudíž v termu jsou proměnné spojené logickým součinem a samotné termy logickým součtem).\n \n\'\'\'Příklady:\'\'\'\n\nPříklad, kdy nejde jedničku s ničím sdružit:\n\n[[Soubor:Dis1.png]]\n\nPříklad, kdy je možné jednu Karnaughovu mapu různě interpretovat a vytvořit tak několik různých funkcní (a také ukázka, jak vypadají různé zkrácené normální disjunktní formy):\n\n[[Soubor:Dis3.png]]\n\n[[Soubor:Dis4.png]]\n\n[[Soubor:Dis2.png]]\n\n=====Minimalizace konjunktní formy=====\nSdružují se bunky, které mají hodnotu rovnou log.0. Sdružená buňka se pak napíše (v závislosti na její pozici) jako term, který tvoří součást jedné z konjunktních forem (tudíž v termu jsou proměnné spojené logickým součtem a samotné termy logickým součinem).\n\n[[Soubor:Kon1.png]]\n\n=====Neúplně definované funkce=====\nKdyž v pravdivostní tabulce na místě vysledku je X místo 1 nebo 0. Při sdružování buněk se tak můžeme tvářit, že je to cokoli z toho:\n\n\'\'\'Konjunktní forma:\'\'\'\n\n[[Soubor:kon1.png]]\n\n\'\'\'Disjunktní forma:\'\'\'\n\n[[Soubor:Dis5.png]]\n\n----\n\n\n===Další reprezentace logických funkcí===\nZvýrazněny jsou stavy, ve kterých jsou pravdivostní hodnoty funkce F(x,y,z) rovny logické 1 (tedy stavy 1,3,6).\n\n=====Vennův diagram=====\n[[Soubor:Venn.png]]\n\n=====N-rozměrná jednotková krychle=====\nVýhoda tohoto modelu je v názornosti, avšak jeho praktické využití je omezeno pro 3 až 4 proměnné. Pro větší počet proměnných je velmi obtížné krychli nakreslit a pracovat s ní.\n\n[[Soubor:Krychle1.png]]\n\n=====Svobodova mapa=====\nlog. mapa užívající přiřazení proměnných, u něhož platí, že při otočení přiřazení proměnných o 180° kolem středu mapy získáme přiřazení inverzní.\n\n----\n\n\n===Metoda Quine-McCluskey===\nJe to tabulární metoda, je vhodná i pro funkce více než 5-6 proměnných kde Karnaughovy mapy selhávají, a pro minimalizaci obvodů s více výstupy.\n\n\'\'\'Pro úplnou normální disjunktní formu je postup tento:\'\'\'\n\n\'\'\'1)\'\'\' Vypíšeme si hodnotu všech kombinací proměnných, kde je výstup 1. Konkrétním proměnným musíme přiřadit váhu, aby tuto hodnotu bylo možno určit (např. když máme 4 proměnné, tak hodnota bude reprezentována jako wxyz).\n\n[[Soubor:Qmc1.png]]\n\n----\n\n\'\'\'2)\'\'\' Tato čísla seřadíme do skupin podle počtu jedniček v binární verzi hodnot proměnných (a v rámci dané skupiny se seřadí podle jejich vah.\n\n[[Soubor:Qmc2.png]]\n\n----\n\n\'\'\'3)\'\'\' Hledáme skupiny sousedních implikantů tak, že mezi sousedícími skupinami hledáme dvojice, u kterých je možné některou z proměnných zanedbat (a znovu je zapíšeme do tabulky). V tabulce označíme eliminovanou proměnnou pomlčkou.\n\n[[Soubor:Qmc3.png]]\n\n----\n\n\'\'\'4)\'\'\' Provedeme druhou iteraci a snažíme se eliminovat proměnnou z již zkrácených implikantů. Pokud to půjde, tak potom můžeme zkusit provést ještě jednu iteraci.\n\n[[Soubor:Qmc4.png]]\n\n----\n\n\'\'\'5)\'\'\' Nyní máme několik zkrácených implikantů, které nám však několikanásobně pokrývají vrcholy funkce. Proto je znázorníme v \'\'\'mřízce implikantů\'\'\' a hledáme co nejmenší počet zkrácených implikantů pokrývajících všechny vrcholy. Může existovat více řešení.\n\n[[Soubor:Qmc5.png]]\n\n----\n\n\'\'\'6)\'\'\' Nejprve musíme zahrnout nesporné implikanty (ty, které nemůžeme pokrýt ničím jiným, třeba tady PI1 jako jediné pokrývá 9, a PI7 15). Zbývá několik vrcholů, které lze pokrýt různým způsobem.\n\n[[Soubor:Qmc6.png]]\n\n----\n\n\'\'\'7)\'\'\' Pomocí zvolených implikantů vyjádříme řešení.\n\n[[Soubor:Qmc7.png]]\n\n----\n\n====Petrickova funkce====\nPředstavuje algoritmus nalezení minimálního pokrytí aritmeticky. Funkce \numožňuje nalezení optimálního řešení, její složitost však narůstá s počtem zkrácených implikantů. Pracujeme se zkrácenými implikanty nalezenými metodou Quine-McCluskey.\n\n\'\'\'1)\'\'\' Nejprve nalezneme nesporné implikanty, a poté mřížku přepíšeme bez nich.\n\n[[Soubor:Petrick.png]]\n\n\'\'\'2)\'\'\' Pro každý nepokrytý implikant zapíšeme sumu zkrácených implikantů, které jej pokrývají, a výsledné sumy zapíšeme jako součin - vznikne konjunktní forma. V překladu to znamená, že se pro konkrétní číslo podíváme, kde jsou tam křížky a ty implikanty které je tam mají sečteme a máme jeden člen té konjunktní formy.\n\n[[Soubor:Petrick1.png]]\n\n\'\'\'3)\'\'\' Vzniklý zápis v konjunktní formě přepíšeme na disjunktní (roznásobením, a zjednodušíme aplikováním pravidel Booleovy algebry)\n\n[[Soubor:Petrick2.png]]\n\n\'\'\'4)\'\'\' Každý z termů v disjunktní formě představuje jedno možné pokrytí. Vybereme to s nejnižší cenou (který term má nejmíň členů/písmenek). Pokud jich je takových víc, funkce má více minimálních řešení.\n\n[[Soubor:Petrick3.png]]\n\n----','utf-8'),(1526,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22, 25\n\n\'\'\'Zpracovává se\'\'\': 15, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 08, 09 (25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 (10)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1527,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n13, 14, 18, 24, 26, 27\n\nZoufalstvi:\n\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22, 23, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40.','utf-8'),(1528,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1529,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1530,'','utf-8'),(1531,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1532,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1533,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Se spojitým časem==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1534,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Se spojitým časem==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==S diskrétním časem==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1535,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá Fourierova transformace==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==S diskrétním časem==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1536,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá Fourierova transformace==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní fourierova transformace==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1537,'','utf-8'),(1538,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n===Diskrétní Fouriérova řada===\n[[Soubor:DFR.png]]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá Fourierova transformace==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Diskrétní fourierova transformace==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1539,'','utf-8'),(1540,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n===Diskrétní Fouriérova řada===\n[[Soubor:DFR.png]]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá Fourierova transformace==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Fourierova transformace s diskretnim casem==\n[[Soubor:DTFT.png]]\n\n==Diskrétní fourierova transformace==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1541,'','utf-8'),(1542,'=Vata=\n\n[https://www.fit.vutbr.cz/study/courses/ISS/public/pred/souhrn/souhrn.pdf Souhrn předmětu ISS]\n\n[http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t Dobré vysvětlení v jedné BP]\n\n===Signál===\n\nSignál je v podstatě cokoli :) Většinou fyzikální veličina. Např.: akustický tlak, stupně šedi na snímku, kurz měny. Vypadá to jako zápis ze seismografu.\n\n\'\'\'Inteligentně:\'\'\' jedna nebo několik nezávislých proměnných (většinou čas), jedna závislá. ([http://cs.wikipedia.org/wiki/Prom%C4%9Bnn%C3%A1#Vysv.C4.9Btluj.C3.ADc.C3.AD_prom.C4.9Bnn.C3.A9 zavisla vs. nezavisla])\n\nRozlišujeme signály spojité a diskrétní.\n\n\'\'\'Spojitý signál\'\'\'\n\nJeho hodnota je definována v každém časovém okamžiku. \n\nZapsáno jako <m> t in R</m> a zkoumaná závislost se značí například: <m> s(t)</m>\n\n\'\'\'Diskrétní signál\'\'\'\n\nMá hodnoty pouze v diskrétních časových okamžicích. Ze spojitého se dá získat vzorkováním nebo kvantováním. \n\nJedná se o celočíselné hodnoty <m> n in Z</m> a zkoumanou závislost značíme jako <m> s[n]</m>. \n\nJedná se o řady čícel, takže jsou diskrétní signály nazývány posloupnostmi.\n\n\nDále můžeme rozlišovat na signály deterministické a náhodné.\n\n\'\'\'Deterministické\'\'\' signály můžeme zapsat \'\'\'vztahem, rovnicí či nerovností\'\'\' a tak pro každý jejich časový okamžik známe jejich hodnotu. Kdežto \'\'\'náhodné signály\'\'\' tuto vlastnost nemají a můžeme je charakterizovat jenom pomocí jejich \'\'\'parametrů\'\'\'.\n\n\n\n\'\'\'Harmonický signál\'\'\'\n\nHarmonický signál je takový signál, který lze vyjádřit funkcí \n\n<m> f(t) = C_1 cos(omega_1 t + varphi_1)</m> pro spojité a funkcní\n\n<m> s[n] = C_1 cos(omega_1 n + varphi_1)</m> pro diskrétní\n\nkde C je amplituda a omega je kruhový kmitočet (v radiánech).\n\nPak by jsme se nemely nechat nachytat co je to Diracův impulz: Jednotkový impuls se spojitým časem.\n\n===Komplexní exponenciála===\n\nVšechno se točí kolem komplexních čísel.\n\nNormálně se zapisují do pravoúhlých souřadnic jako <m> z = a+jb </m> . V těchto pravoúhlých souřadnicích si můžeme představit komplexní číslo jako vektor, začínající ve středu souřadného systému a končící v bodě popsaném výše (pythagorova věta)\n\n<m>z = r cos phi +jr sin phi</m>\n\nA protože je to vektor, tak to můžeme hodit na jednotkovou kružnici.\n\nDůležité je vědět, že komplexní čísla se dají zapsat v exponenciálním tvaru. \n\n<m> z = re^{j phi} </m>\n\nDíky jednotkové kružnici, které má poloměr (r) 1 můžeme vyjádřit toto:\n\n<m> e^{j phi} = cos phi + j sin phi </m> \n\n[[Soubor:Euler\'s_formula.png]]\n\nCož je nejdůležitější vzoreček, ze kterého se odvozují všechna moudra o komplexních číslech.\n\nDůležité je všimnou si členu <m> e^{j phi} </m> (někdy místo fí může být x)\n\nTen je funkcí pro komplexní exponenciálu.\n\n[[Soubor:Komplex_exp.jpg]]\n\nNa tomhle obrázku vidíte komplexní exponenciálu (modrou) a její průměty do roviny imaginární a reálné v závislosti na čase. (černě) součet těchto 2 průmětů je oblíbený vzoreček: <m> e^{j phi} = cos phi + j sin phi </m> a pak vidíme jednotkovou kružnici, která je průmětem komplexní exponenciály do gausovy roviny.\n\nPo všech strastech a malých úpravách ultimátního vzorečku umíme zapsat obecnou kosinovku\n\n<m> cos phi = {e^{jx} + e^{-jx}}/{2} </m>\n\nZe středoškolské fyziky umíme zapsat cosinusovku takto:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j omega_1 t} + C_1/2 e^{-j omega_1 t} </m>\n\nK tomu můžeme přidat počáteční fázi tak, že do každé závorky přičteme fí. \nPo roznásobení závorek J se dostaneme do tohoto tvaru:\n\n<m> C_1 cos(omega_1 t) = C_1/2 e^{j phi} e^{j omega_1 t} + C_1/2 e^{-j phi} e^{-j omega_1 t} </m>\n\nKdyž se na to podíváme jak to běží, tak vidíme, že \n\n<m> C_1/2 e^{j phi} a C_1/2 e^{-j phi}</m>\n\njsou komplexní konstanty, které se nemění s časem.\n\nVýrazy:\n\n<m> C_1/2 e^{j omega_1 t} a C_1/2 e^{-j omega_1 t} </m>\n\nnabývají hodnot tšchto konstant v <m>t = 0 a t = kT_1 </m>\n\n==Vzorkování==\n[[Soubor:Vorkovani.png]]\n\n=Obecně=\nZdroj: [http://www.fit.vutbr.cz/study/DP/BP.php?id=12802&file=t BP zabývající ce FŘ a FT]\n\n\'\'\'Podstatou spektrální analýzy je zjistit, nakolik jsou dané frekvence zastoupeny v analyzovaném signálu.\'\'\'\n\nTedy rozklad na jednotlivé sinusovky. Aby to nebylo jednoduché (tedy, aby to bylo obecné - pro komplexní signály), používá se komplexních čísel, místo sinusovky se pak používá komplexní exponenciála. Komplexním číslem jde totiž zapsat jak amplitudu, tak fázi.\n\nPotřebujeme to dělat protože reálné signály nejsou pěkné, ale ošklivé zubaté něco, což ale naštěstí vždy jde rozložit na několik pěkných komplexních exponenciál.\n\n==Fourierova řada==\n\nJe to řada spousty komplexních exponenciál vynásobených nějakými koeficienty.\n\n\'\'\'Myšlenka pana Fouriera:\'\'\' Jakýkoli periodický signál se dá zapsat pomocí součtu nekonečného počtu sinusovek a kosinusovek.\n\n<m> x(t) = sum{k = -infty}{+infty}{c_k e^{j k omega_1 t}} </m>\n\nJe to funkce x v závislosti na čase (t), která je od nekonečna do nekonečna.\n\nJe to suma násobků koeficientu (c) a komplexní exponenciály. Koeficienty FŘ jsou komplexní čísla, která nám říkají, nakolik se signál podobá komplexní exponenciále s danou frekvencí.\n\n<m> e^{j k omega_1 t} </m> jsou harmonicky vztažné komplexní exponenciály. Zobrazeny po jedné na následujících obrázcích.\n[[Soubor:Harmcomplex.png]]\n\nV levém sloupci jsou s kladným k a v pravém se záporným - tedy podle komplexně sdruženého čísla. První je jen jedna a je rovná, protože k = 0 => jedná se o reálný koeficient. A ten je komplexně sdružený sám sebou. A protoze hodnota funkce e umocněné na j*1*omega*t je pořád 1.\n\n\nŘadu můžeme přepsat taky tak, že budeme mít vždy v jednom kroku součet komplexně sdružených exponenciál.\n\n<m> x(t) = c_0 sum{k = 1}{+infty}{[c_k e^{j k omega_1 t} + c_{-k} e^{j -k omega_1 t}]} </m>\n\nKde c_0 je ta reálná část.\n\nCož se dá přepsat podle ultimátního vzorečku na:\n\n<m> x(t) = c_0 sum{k = 1}{+infty} {[C_k cos(k omega_1 t + phi_k)]} </m>\n\nJeště je dobré poznamenat, že amplituda k-té harmonické složky: <m> C_k = 2 delim{|}{c_k}{|}</m>.\n\n[http://user.unob.cz/zaplatilek/ZEL/Tema19.htm Hezka strana, ktera ukazuje FŘ na prikladech]\n\n===Diskrétní Fouriérova řada===\n[[Soubor:DFR.png]]\n\n=Fourierova transformace=\nNež začneme transformovat fourierem je dobré umět základní transformace. Nastudovat [https://www.fit.vutbr.cz/study/courses/ISS/public/pred/zakl_sig/zakl_sig.pdf ze slidu] strana 7 až 13.\n\n\n\'\'\'FT slouží ke zjištění koeficientů (c) z FŘ, takových jejích členů, pomocí kterých vyjádříme zkoumaný NEPERIODICKÝ signál.\'\'\'\n\nTento koeficient nám říká jak moc se liší ten signál od komplexní exponenciály s frekvencí, kterou právě zkoumáme.\n\n==Spojitá Fourierova transformace==\nJde o zjištění rozdílu mezi dvěma funkcemi. Toto porovnání nazýváme chytře \'\'\'korelace\'\'\'. \n\nRozdíl dvou funkcí zjistíme tak, že je mezi sebou v jednom bodě vynásobíme a pak sčítáme plochy, které vznikly pod křivkou, kterou jsme vyrobili násobením. \n\nKdyž se bavíme o ploše pod funkcí => integrujeme.\n\nTakže \'\'\'fourierova transformace je integrací součinu zkoumaného signálu s komplexní exponenciálou.\'\'\'\n\n<m> X(j omega) = int{- infty}{infty}{x(t) ~ e^{-j omega t} dt}</m>\n\na výsledkem je spektrální funkce, tedy hodnota pro každé existující omega. Tato hodnota má svou reálnou a imaginární složku, protože jsme pracovali s komplexní exponenciálou.\n\n====Zpětná====\n\n<m> x(t) = 1/{2pi}int{- infty}{infty}{X(j omega) ~ e^{j omega t} d omega}</m>\n\n==Fourierova transformace s diskretnim casem==\n[[Soubor:DTFT.png]]\n\n==Diskrétní fourierova transformace==\n\'\'\'DOPLNIT\'\'\' \'\'Jak je to s tím jen pro jendu periodu? a Tím že diskretni musi byt periodicke?\'\'\nOproti spojité je logicky rozdíl v tom, že pracujeme v diskrétních řasových intervalech. Takže výsledkem není spektrální funkce, ale jednoduše spektrum (pole hodnot). Ze stejného důvodu se také integrál mění na pouhou sumu.\n\n<m> X[k] = sum{n = 0}{N - 1}{x[n] ~ e^{-j {2 pi}/N k n}}</m>\n\nPí je 180 stupňů. Což jsou zhruba 3 radiány. 1 rad = 180/pí.\n\nN je počet vzorků.\n\nDvě pí lomeno N je jinak vyjádřená omega. [http://cs.wikipedia.org/wiki/Perioda_(fyzika) Středoškolská fyzika]\n\n====Zpětná====\n\n<m> x[n] = 1/N sum{n = 0}{N - 1}{X[k] ~ e^{+j {2 pi}/N k n}}</m>\n\n=Rychlá Fourierova transformace=\n[[Soubor:Ffthyrs.png]]\n\n=Shrnutí by Černocký=\n\n- vedet, co do ktere transformace/rady vstupuje a co je vysledkem, takze:\n\n\'\'\'Fourierova rada:\'\'\'\n\nin: periodicky signal se spojitym casem\n\nout: koeficienty, ktere urcuji amplitudy a faze komplexnich exponencial na nasobcich zakladni\nfrekvence.\n\n\'\'\'Fourierova transformace:\'\'\'\n\nin: obecny signal se spoj. casem\n\nout: funkce definovana pro vsechny frekvence.\n\n\'\'\'Fourierova trans. s diskretnim casem (DTFT\'\'\'):\n\nin: diskretni signal\n\nout: funkce definovana pro vsechny frekvence, periodicka se vzorkovaci \nfrekvenci.\n\n\'\'\'Diskretni Fourierova rada\'\'\'\n\nin: diskretni signal periodicky po N vzorcich.\n\nout: koeficienty periodicke po N vzorcich (+ vedet, ze jedna Ntice odpovida jenomu nasobku vzork.\nfrekvence).\n\n\'\'\'Diskretni Fourierova transformace:\'\'\'\n\nin: N vzorku disktretniho signalu\n\nout: N vzorku spektra, ktere udavaji jeho hodnoty od 0 az po N/(N-1)*Fs.\n\n\n- presne vzorce znat nemusite, kdyz se naucite to, co je vyse, date je dohromady z hlavy.\n\n- rad bych, abyste meli jasno ve 4 pouzivanych frekvencich:\n\n• obycejna v [Hz]\n\n• normovana v []\n\n• kruhova v [rad/s]\n\n• normovana kruhova v [rad]','utf-8'),(1543,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1544,'== ZNAČKOVACÍ JAZYKY ==\n\n• Jsou nástrojem pro vkládání dodatečných informací do běžného textu. Umí zpracovat části obecného a části strukturovaného textu, který je určen pro zpracování počítačem. Obecný text převládá a speciální části jsou ohraničeny (u klasického programovacího jazyka je to přesně naopak).\n\n• Jsou založeny na gramatice, která je definována jako konečná množina gramatických pravidel, které generují řetězce daného jazyka.\n\n==== PROCEDURÁLNÍ ZNAČKA ====\n\n• Definuje pro prvek konkrétní akci, která se má s prvkem provést (vycentrovat, nastavit velikost písma…) a má pevný význam (sémantiku). Na tomto principu funguje HTML.\n\n==== DEKLARATIVNÍ (UNIVERZÁLNÍ) ZNAČKA ==== \n\n• Definuje prvek jako logickou část v rámci značkovaného textu (jde o jméno, telefon osoby...), význam značky není přesně daný a až při zpracování se bere ze souboru, kde je definovaný. \n\n• Takto funguje XML a vyžaduje pak DTD (Document Type Definition), který definuje výslednou strukturu dokumentu. To umožňuje hromadné zpracování textu a nezávislé zpracování částí textu. Velmi snadno lze také detekovat poškozené nebo neúplné části.\n\n• SGML (Standars Generalized Markup Language) je značkovací metajazyk umožňující definovat značkovací jazyky jako svoje vlastní podmnožiny (vchází z něj HTML, DocBook a další). Jeho základní vlastnosti jsou: upřednostňuje deklarativní značkování, umožňuje definovat typy dokumentů a je nezávislý na technickém vybavení počítače.\n\n----\n\n== HTML (HYPERTEXT MARKUP LANGUAGE) ==\n\n• HTML je typem dokumentu SGML, kde je značkám přiřazena sémantika hypertextového dokumentu v prostředí webu (WWW – World Wide Web).\n\n• Výsledná aplikace používá další formální jazyky, jako jsou skriptovací jazyky (JavaScript), kaskádové styly dokumentů (CSS) a další (např. pro kódování různých jazyků).\n\n==== PRAVIDLA HTML ====\n\n• Jednotlivé značky (tagy) jsou ohraničeny úhlovými závorkami (< a >). \n\n• Existují otevírací (<<nowiki />h1>) a uzavírací značky (<<nowiki />/h1>), které dohromady tvoří element (prvek) dokumentu.\n\n• Některé značky jsou nepárové a píšou se jako <<nowiki />img ... > nebo <<nowiki />img ... />, <<nowiki />br> nebo <<nowiki />br/> - další řádek. \n\n• Dále obsahují atributy, které zpřesňují vlastnosti elementu a píšou se ve formátu atribut=“hodnota“ a oddělují se mezerami - <<nowiki />form action=\"skript.php\" method=\"get\"> ... \n\n• Elementy mohou být vnořené.\n\n====== STRUKTURA DOKUMENTU ======\n\n• Deklarace \'\'\'DTD\'\'\' (povinná až od verze 4.01) - <<nowiki />!DOCTYPE ... >.\n\n• \'\'\'KOŘENOVÝ ELEMENT\'\'\' reprezentující celý dokument - <<nowiki />html> ... <<nowiki />/html>.\n\n• \'\'\'HLAVIČKA\'\'\' dokumentu obsahující metadata, která určují vlastnosti celého dokumentu (název, jazyk, kódování, <<nowiki />style> - odkaz na CSS soubor se stylem…) - <<nowiki />head> ... <<nowiki />/head>.\n\n• \'\'\'TĚLO\'\'\' dokumentu obsahující vlastní text - <<nowiki />body> ... <<nowiki />/body>.\n\n====== ZNAČKY (TAGY) ======\n\n• \'\'\'STRUKTURÁLNÍ ZNAČKY\'\'\' rozvrhují strukturu dokumentu.\n\n<<nowiki />h1>, <<nowiki />h2>, ... - nadpisy\n\n<<nowiki />p> - odstavec, <<nowiki />span> - úsek textu, <<nowiki />div> - oddíl textu\n\n<<nowiki />ol> - číslovaný seznam, <<nowiki />ul> - odrážkový seznam, <<nowiki />li> - položka seznamu\n\n<<nowiki />table> - tabulka, <<nowiki />tr> - řádek tabulky, <<nowiki />td> - buňka tabulky, <<nowiki />th> - hlavička tabulky\n\n<<nowiki />frame> - rám (umožňuje rozdělit okno prohlížeče na několik částí zobrazující různé stránky)\n\n• \'\'\'POPISNÉ (SÉMANTICKÉ) ZNAČKY\'\'\' popisují povahu obsahu elementu.\n\n<<nowiki />title>, <<nowiki />adress>, <<nowiki />q> - citace ...\n\n• \'\'\'STYLISTICKÉ ZNAČKY\'\'\' určují vzhled elementu. Je snaha tyto značky nahradit CSS souborem, který popisuje vzhled dokumentu odděleně od jeho textu, protože oddělení způsobí, že jde vlastnost elementu změnit jen na jednom místě v textu a text HTML souboru se pak lépe zpracovává i jinými způsoby než při zobrazení na obrazovce počítače (mobilní telefony, tisk, alternativní prohlížeče pro postižené...).\n\n<<nowiki />b> - tučné písmo, <<nowiki />i> - kurzíva, <<nowiki />u> - podtržení\n\n• \'\'\'ZNAČKY FORMULÁŘE\'\'\' dovede HTML zpracovat a prvky vykreslit, jejich další zpracování ale zajišťuje skript serveru (např. PHP).\n\n<<nowiki />form> - formulář, má metody get (posílaná data jsou vidět v řádce prohlížeče) a post (jsou skryta)\n\n<<nowiki />input> - vstup typu text, password (skrývá písmena), radio (kulatý přepínač), checkbox (zatrhávací políčko), submit (odesílací tlačítko)\n\n<<nowiki />textarea> - velké vstupní textové pole\n\n<<nowiki />select> - výběrové pole, <<nowiki />option> - volba v poli\n\n<<nowiki />label> - popis pole\n\n<<nowiki />button> - tlačítko\n\n• <<nowiki />!-- ... --> - komentář\n\n• <<nowiki />br> - řádkový zlom\n\n• <<nowiki />hr> - linka\n\n• <<nowiki />img src=...> - obrázek\n\n• <<nowiki />a href=... > - odkaz\n\n• <<nowiki />?php kód v jazyce php ?>\n\n• <<nowiki />script type=\"text/javascript\"> kód javascriptu <<nowiki />/script>, jinak lze použít atribut src pro připojení externího souboru\n\n==== VERZE ====\n\n• HTML4 – popisuje celý dokument včetně vzhledu, zastaralé.\n\n• XHTML – bližší XML, striktnější, některé značky odpadly (<<nowiki />center>, <<nowiki />u>, <<nowiki />font>, ...), používá dokument CSS.\n\n• HTML5 – přibyly značky pro sémantické rozdělení dokumentu (<<nowiki />header>, <<nowiki />article>, <<nowiki />section>, <<nowiki />footer>, ...) a značky pro video a zvuk pomocí ogg, používá CSS3. Verze je standardizovaná organizací W3C, přesto jsou rozdíly v prohlížečích (především IE). Dokument má stromovou strukturu DOM (na obrázku), s tou lze dynamicky pracovat pomocí JavaScriptu.\n\n[[Soubor:28_DOM.JPG]]\n \n== JAVASCRIPT ==\n\n• Interpretovaný (nemusí se kompilovat) objektově orientovaný skriptovací jazyk (navržen s ohledem na snadné ovládnutí a rychlý a pohodlný vývoj programů).\n\n• Klientská verze je součástí většiny prolížečů.\n\n• Slouží k přidání dynamiky do stránek.\n\n• Jádro jazyka na úrovni syntaxe je podobné C, C++ nebo Javě – jinak ale nemá s Javou nic společného (nejde o jinou verzi Javy). Z jazyka Perl přebírá regulární výrazy a práci s poli.\n\n• Vznikal pod názvem LiveScript, na JavaScript byl přejmenován před uvedením na trh, v produktech Microsoft je někdy jako Jscript nebo ECMAScript. Standard jádra jazyka definovala organizace ECMA.\n\n• Má potlačenou typovou kontrolu.\n\n• Nemá zcela ustálený název ani definici.\n\n• Identifikátory a klíčová slova jsou case-sensitive a používají písmena, čísla, podtržítko a dolar.\n\n• Funguje pouze v prohlížeči a je možné ho zakázat, různé verze prohlížečů vedou k častým chybám. \n\n• Kromě cookies neumí přistupovat k souborům a systémovým objektům ani žádná data uložit.\n\n• Objektovost určuje hlavně uspořádání vlastností a příkazů jazyka. Používá pouze jednoduchou dědičnost. Neexistují třídy, ale používají se konstruktory definované jako Function (tedy jde o funkce) a základní konstruktor Object (vše se dědí z něj).\n\n• Umí použít objekty okna prohlížeče (window), k prvkům stránky HTML (window.document), k zabudovaným objektům (Date, Math, string) a k dalším vytvořeným objektům.\n\n• Příkazy JavaScriptu: jednoduché, výrazové, složené, bloky, podmíněné, přepínač, cykly (break a continue), with (výjimky a jejich zachytávání) a návěští.\n\n• AJAX umožňuje komunikaci se serverem bez nutnosti reloadu stránky (funguje asynchonně – zatímco se jeden požadavek zpracovává, je možné odeslat další).\n\n==== KLIENTSKÝ JAVASCRIPT ====\n\n• Vznikne integrací do prohlížeče, používá objektový model dokumentů DOM (specifikace definovaná organizací W3C – World Web Consorcium, bohužel se moc nepoužívá a vznikají rozdíly v prohlížečích). Použitím DOM lze dosáhnout dynamického chování webových stránek (DHTML – Dynamic HTML).\n\n• Jádro jazyka (obohacené o další knihovny) lze použít i mimo prohlížeče \nnapř. formou Script Hostingu (technologie umožňující MS Windows interpretaci skriptovacích jazyků).\n\n• Globálním objektem je okno prohlížeče Window, prohlížeč generuje události, které indikují chování okna a aktivity uživatele (model programování řízený událostmi – klávesy, pohyb myši…). Všechny globálně deklarované proměnné jsou proměnné okna Window a oproti ostatním objektům má okno méně vlastností. Nejpoužívanějším objektem je pak objekt Document.','utf-8'),(1545,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1546,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nEnqueued:\n\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]]\n[[31 Jazyk UML|31]] \n\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n\n[[25 Principy modelování a simulace systémů|25]] \n\n \n[[30 Životní cyklus softwaru|30]]\n\n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1547,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nEnqueued:\n\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]]\n[[31 Jazyk UML|31]] \n\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[30 Životní cyklus softwaru|30]]\n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1548,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22\n\n\'\'\'Zpracovává se\'\'\': 15, 10, 25\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 08, 09 (25) \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 (10)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1549,'====Základní pojmy====','utf-8'),(1550,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n====Princip modelování a simulace====\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti','utf-8'),(1551,'','utf-8'),(1552,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n====Princip modelování a simulace====\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti\n\n[[Soubor:Ims1.png]]\n\n----\n\n======Čas======\nBudeme rozlišovat tři pojmy:\n# \'\'\'Reálný čas\'\'\' - ve kterém probíhá skutečný děj v reálném systému\n# \'\'\'Modelový čas\'\'\' - časová osa modelu. Může být reálný, zrychlený, nebo spomalený.\n# \'\'\'Strojový čas\'\'\' - čas CPU spotřebovaný na výpočet programu u (závisí na složitosti simulačního modelu, nesouvisí přímo s modelovým časem).\n\n----\n\n======Klasifikace modelů======\nTredičně dělíme modely na:\n# \'\'\'Modely spojité\'\'\' - proměnné modelu mění svůj stav spojitě. Tyto modely jsou popsatelné například diferenciálními rovnicemi.\n# \'\'\'Modely diskrétní\'\'\' - stav modelu se mění skokově v diskrétních časových okamžicích. Příkladem takového modelu může byt například konečný automat.\n# \'\'\'Modely kombinované\'\'\' - – obsahuji spojité i diskrétní prvky současně v jednom modelu.\n\n----','utf-8'),(1553,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\nMatematicky je systém dvojice S = {U, R}:\n# \'\'\'U\'\'\' - universum, množina všech prvků systému\n# \'\'\'R\'\'\' - množina všech relací, vazeb prvků\n\n\'\'Akvárko je systém složený ze stěn, vody, rybiček a všeho, co rybičky vyprděly. Vazby mezi rybičkami jsou takové, že velké rybičky žerou menší.\'\'\n\n# \'\'\'Isomorfní\'\'\' - ekvivalentní systémy, 1:1\n# \'\'\'Homomorfní\'\'\' - podobné systémy, N:1, tvorba homomorfních systémů je principem modelování.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n====Princip modelování a simulace====\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti\n\n[[Soubor:Ims1.png]]\n\n----\n\n======Čas======\nBudeme rozlišovat tři pojmy:\n# \'\'\'Reálný čas\'\'\' - ve kterém probíhá skutečný děj v reálném systému\n# \'\'\'Modelový čas\'\'\' - časová osa modelu. Může být reálný, zrychlený, nebo spomalený.\n# \'\'\'Strojový čas\'\'\' - čas CPU spotřebovaný na výpočet programu u (závisí na složitosti simulačního modelu, nesouvisí přímo s modelovým časem).\n\n----\n\n======Klasifikace modelů======\nTredičně dělíme modely na:\n# \'\'\'Modely spojité\'\'\' - proměnné modelu mění svůj stav spojitě. Tyto modely jsou popsatelné například diferenciálními rovnicemi.\n# \'\'\'Modely diskrétní\'\'\' - stav modelu se mění skokově v diskrétních časových okamžicích. Příkladem takového modelu může byt například konečný automat.\n# \'\'\'Modely kombinované\'\'\' - – obsahuji spojité i diskrétní prvky současně v jednom modelu.\n\n----','utf-8'),(1554,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\nMatematicky je systém dvojice S = {U, R}:\n# \'\'\'U\'\'\' - universum, množina všech prvků systému\n# \'\'\'R\'\'\' - množina všech relací, vazeb prvků\n\n\'\'Akvárko je systém složený ze stěn, vody, rybiček a všeho, co rybičky vyprděly. Vazby mezi rybičkami jsou takové, že velké rybičky žerou menší.\'\'\n\n# \'\'\'Isomorfní\'\'\' - ekvivalentní systémy, 1:1\n# \'\'\'Homomorfní\'\'\' - podobné systémy, N:1, tvorba homomorfních systémů je principem modelování.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n====Princip modelování a simulace====\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti\n\n[[Soubor:Ims1.png]]\n\n----\n\n======Čas======\nBudeme rozlišovat tři pojmy:\n# \'\'\'Reálný čas\'\'\' - ve kterém probíhá skutečný děj v reálném systému\n# \'\'\'Modelový čas\'\'\' - časová osa modelu. Může být reálný, zrychlený, nebo spomalený.\n# \'\'\'Strojový čas\'\'\' - čas CPU spotřebovaný na výpočet programu u (závisí na složitosti simulačního modelu, nesouvisí přímo s modelovým časem).\n\n----\n\n======Klasifikace modelů======\nTredičně dělíme modely na:\n# \'\'\'Modely spojité\'\'\' - proměnné modelu mění svůj stav spojitě. Tyto modely jsou popsatelné například diferenciálními rovnicemi.\n# \'\'\'Modely diskrétní\'\'\' - stav modelu se mění skokově v diskrétních časových okamžicích. Příkladem takového modelu může byt například konečný automat.\n# \'\'\'Modely kombinované\'\'\' - – obsahuji spojité i diskrétní prvky současně v jednom modelu.\n\n----\n\n======Verifikace a validace======\n# \'\'\'Verifikace\'\'\' - Ověřujeme korespondenci simulačního a abstraktního modelu, tj. zpravidla izomorfní vztah mezi AM a SM. Jinými slovy je to kontrola, zda to, co jmse naprogramovali, odpovídá tomu, co jsme vymysleli a třeba načmárali na papír.\n# \'\'\'Validace\'\'\' - Ověřování validity (platnosti) simulačního modelu je proces, v němž se snažíme dokázat, že skutečně pracujeme s modelem adekvátním modelovanému systému. Jinými slovy chceme ověřit, zda model dává validní výsledky – takové, které by dávalo pozorování původního systému při stejných podmínkách. Validace je náročná. Nelze vyrobit model, který bude 100% validní, respektive ani u sebedokonalešího modelu nelze 100% validitu dokázat.','utf-8'),(1555,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\nMatematicky je systém dvojice S = {U, R}:\n# \'\'\'U\'\'\' - universum, množina všech prvků systému\n# \'\'\'R\'\'\' - množina všech relací, vazeb prvků\n\n\'\'Akvárko je systém složený ze stěn, vody, rybiček a všeho, co rybičky vyprděly. Vazby mezi rybičkami jsou takové, že velké rybičky žerou menší.\'\'\n\n# \'\'\'Isomorfní\'\'\' - ekvivalentní systémy, 1:1\n# \'\'\'Homomorfní\'\'\' - podobné systémy, N:1, tvorba homomorfních systémů je principem modelování.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n==Princip modelování a simulace==\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti\n\n[[Soubor:Ims1.png]]\n\n----\n\n======Čas======\nBudeme rozlišovat tři pojmy:\n# \'\'\'Reálný čas\'\'\' - ve kterém probíhá skutečný děj v reálném systému\n# \'\'\'Modelový čas\'\'\' - časová osa modelu. Může být reálný, zrychlený, nebo spomalený.\n# \'\'\'Strojový čas\'\'\' - čas CPU spotřebovaný na výpočet programu u (závisí na složitosti simulačního modelu, nesouvisí přímo s modelovým časem).\n\n----\n\n======Klasifikace modelů======\nTredičně dělíme modely na:\n# \'\'\'Modely spojité\'\'\' - proměnné modelu mění svůj stav spojitě. Tyto modely jsou popsatelné například diferenciálními rovnicemi.\n# \'\'\'Modely diskrétní\'\'\' - stav modelu se mění skokově v diskrétních časových okamžicích. Příkladem takového modelu může byt například konečný automat.\n# \'\'\'Modely kombinované\'\'\' - – obsahuji spojité i diskrétní prvky současně v jednom modelu.\n\n----\n\n======Verifikace a validace======\n# \'\'\'Verifikace\'\'\' - Ověřujeme korespondenci simulačního a abstraktního modelu, tj. zpravidla izomorfní vztah mezi AM a SM. Jinými slovy je to kontrola, zda to, co jmse naprogramovali, odpovídá tomu, co jsme vymysleli a třeba načmárali na papír.\n# \'\'\'Validace\'\'\' - Ověřování validity (platnosti) simulačního modelu je proces, v němž se snažíme dokázat, že skutečně pracujeme s modelem adekvátním modelovanému systému. Jinými slovy chceme ověřit, zda model dává validní výsledky – takové, které by dávalo pozorování původního systému při stejných podmínkách. Validace je náročná. Nelze vyrobit model, který bude 100% validní, respektive ani u sebedokonalešího modelu nelze 100% validitu dokázat.\n\n----\n\n===Diskrétní simulace===\nSimulace diskrétních systémů. Diskrétním systémem myslíme takový systém, ve kterém nás nezajímá stav v jakémkoli okamžiku v čase, ale pouze v klíčových momentech. Čas je v diskrétních simulacích nerovnoměrný. Simulátor skáče v čase vždy k další události v čase.\n\n----\n\n======Proces======\nProces definujeme jako posloupnost událostí, které jsou postupně prováděny. Součástí popisu procesu jsou prostředky vyjadřující čekaní po zadanou dobu v modelovém čase, prostředky popisující čekaní ve frontě a podobně. Příkazy vyjadřující čekaní odděluji jednotlivé události v popisu procesu. \n\nProces může být například zákazník v obchodu a jeho posloupnost událostí je: vstup do obchodu, výběr položek k nákupu, zaplacení na pokladně, odchod z obchodu.\n\n# \'\'\'Kvaziparalelismus\'\'\' - V reálných systémech probíhají procesy paralelně – jejich činnost probíhá současně. Na jednoprocesorovém počítači to však není možné, proto vzniknul kvaziparalelismus, což je forma implementace paralelních procesů. Pokud má dojit k současnému provedení událostiněkolika procesy, provedou se v daném okamžiku modelového času, ale jedna po druhé (tj. nikoliv současně v reálném čase), a až se všechny porvedou, poté se posune simulační čas. Toto postupné provádění na jedné straně zjednodušuje implementaci simulačního systému, ale musíme počítat s tím, že pokud výsledek simulace závisí na pořadí těchto událostí, může vzniknout problém (který můžeme vyřešit přiřazením priorit procesům).\n\n----\n\n====Systém hromadné obsluhy - SHO====','utf-8'),(1556,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nEnqueued:\n\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]]\n[[31 Jazyk UML|31]] \n\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[30 Životní cyklus softwaru|30]]\n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1557,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\nEnqueued:\n\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]]\n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n\n\n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1558,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\nMatematicky je systém dvojice S = {U, R}:\n# \'\'\'U\'\'\' - universum, množina všech prvků systému\n# \'\'\'R\'\'\' - množina všech relací, vazeb prvků\n\n\'\'Akvárko je systém složený ze stěn, vody, rybiček a všeho, co rybičky vyprděly. Vazby mezi rybičkami jsou takové, že velké rybičky žerou menší.\'\'\n\n# \'\'\'Isomorfní\'\'\' - ekvivalentní systémy, 1:1\n# \'\'\'Homomorfní\'\'\' - podobné systémy, N:1, tvorba homomorfních systémů je principem modelování.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n==Princip modelování a simulace==\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti\n\n[[Soubor:Ims1.png]]\n\n----\n\n======Čas======\nBudeme rozlišovat tři pojmy:\n# \'\'\'Reálný čas\'\'\' - ve kterém probíhá skutečný děj v reálném systému\n# \'\'\'Modelový čas\'\'\' - časová osa modelu. Může být reálný, zrychlený, nebo spomalený.\n# \'\'\'Strojový čas\'\'\' - čas CPU spotřebovaný na výpočet programu u (závisí na složitosti simulačního modelu, nesouvisí přímo s modelovým časem).\n\n----\n\n======Klasifikace modelů======\nTredičně dělíme modely na:\n# \'\'\'Modely spojité\'\'\' - proměnné modelu mění svůj stav spojitě. Tyto modely jsou popsatelné například diferenciálními rovnicemi.\n# \'\'\'Modely diskrétní\'\'\' - stav modelu se mění skokově v diskrétních časových okamžicích. Příkladem takového modelu může byt například konečný automat.\n# \'\'\'Modely kombinované\'\'\' - – obsahuji spojité i diskrétní prvky současně v jednom modelu.\n\n----\n\n======Verifikace a validace======\n# \'\'\'Verifikace\'\'\' - Ověřujeme korespondenci simulačního a abstraktního modelu, tj. zpravidla izomorfní vztah mezi AM a SM. Jinými slovy je to kontrola, zda to, co jmse naprogramovali, odpovídá tomu, co jsme vymysleli a třeba načmárali na papír.\n# \'\'\'Validace\'\'\' - Ověřování validity (platnosti) simulačního modelu je proces, v němž se snažíme dokázat, že skutečně pracujeme s modelem adekvátním modelovanému systému. Jinými slovy chceme ověřit, zda model dává validní výsledky – takové, které by dávalo pozorování původního systému při stejných podmínkách. Validace je náročná. Nelze vyrobit model, který bude 100% validní, respektive ani u sebedokonalešího modelu nelze 100% validitu dokázat.\n\n----\n\n===Diskrétní simulace===\nSimulace diskrétních systémů. Diskrétním systémem myslíme takový systém, ve kterém nás nezajímá stav v jakémkoli okamžiku v čase, ale pouze v klíčových momentech. Čas je v diskrétních simulacích nerovnoměrný. Simulátor skáče v čase vždy k další události v čase.\n\n----\n\n======Proces======\nProces definujeme jako posloupnost událostí, které jsou postupně prováděny. Součástí popisu procesu jsou prostředky vyjadřující čekaní po zadanou dobu v modelovém čase, prostředky popisující čekaní ve frontě a podobně. Příkazy vyjadřující čekaní odděluji jednotlivé události v popisu procesu. \n\nProces může být například zákazník v obchodu a jeho posloupnost událostí je: vstup do obchodu, výběr položek k nákupu, zaplacení na pokladně, odchod z obchodu.\n\n# \'\'\'Kvaziparalelismus\'\'\' - V reálných systémech probíhají procesy paralelně – jejich činnost probíhá současně. Na jednoprocesorovém počítači to však není možné, proto vzniknul kvaziparalelismus, což je forma implementace paralelních procesů. Pokud má dojit k současnému provedení událostiněkolika procesy, provedou se v daném okamžiku modelového času, ale jedna po druhé (tj. nikoliv současně v reálném čase), a až se všechny porvedou, poté se posune simulační čas. Toto postupné provádění na jedné straně zjednodušuje implementaci simulačního systému, ale musíme počítat s tím, že pokud výsledek simulace závisí na pořadí těchto událostí, může vzniknout problém (který můžeme vyřešit přiřazením priorit procesům).\n\n----\n\n====Systém hromadné obsluhy - SHO====\nJsou to systémy obsahující zařízení, která poskytují obsluhu transakcím. Typický SHO obsahuje:\n\n# Transakce (procesy) a popis jejich příchodů. \n# Obslužné linky (více typů) a popis obsluhy. Jde o zařízení, do kterého proces vstoupí, vykoná zde pomyslnou činnost a následně ho opustí. Pokud je linka plná, proces může vstoupit do fronty.\n# Fronty různých typů, ve kterých transakce čekají\n\n----\n\n======Priority procesů======\nNěkteré procesy mohou mít vyšší prioritu než jiné. Rozlišujeme dva typy priority:\n# \'\'\'Slabá priorita\'\'\' (priorita procesu) - Při příchodu procesu se slabou prioritou k zařízení se nejprve dokončí obsluha procesu, který je uvnitř.\n# \'\'\'Silná priorita\'\'\' (priorita obsluhy) - Obsluha se přeruší a začne obsluha požadavku s vyšší prioritou obsluhy. Požadavek, jehož obsluha byla přerušena, buď:\n## odchází ze systému neobsloužen,\n## nebo byl umístěn do vnitřní fronty, a když je později obsluhován, tak:\n### obsluha pokračuje od přerušeného místa,\n### nebo začíná znovu od začátku.\n\n----\n\n=====Kalendář událostí=====\nŘídící mechanismus simulace. Pokaždé, když nějaký proces dokončí svou diskrétní činnost a „čeká“ na opětovnou činnost (například je ve frontě, v nějaké trvající obsluze nebo prostě čeká na nějaký stav systému), kalendář vybere proces, který má běžet. Pokud v aktuálním simulačním čase už žádný proces nemá naplánovanou aktivitu, posune se kalendář v čase k nejbližšímu budoucímu procesu a aktivuje ho. \n\n\'\'\'Kalendář je uspořádaná datová struktura, která obsahuje:\'\'\'\n# čas, kdy má událost nastat\n# proces, který se má probudit\n# případná priorita procesu.\n \n======Událost======\nPopisuje změnu stavu diskrétního systému. Forma popisu se liší podle použitého formalismu – například v Petriho síti je událost popsána přechodem, v konečném automatu hranou, v programovacím jazyce například několika příkazy. Událost je z hlediska doby trváni \'\'\'atomická operace\'\'\' – proběhne cela v jednom okamžiku modelového času (má nulovou dobu trváni). V simulačních systémech je obvykle implementace událostí triviální – jde o obyčejnou funkci (podprogram).\n\n----','utf-8'),(1559,'====Základní pojmy====\n======Systém======\nSystém můžeme obecně definovat, jako soubor elementárních časti (prvků systémů), které mají mezi sebou určité vazby (propojení prvků). Systémy je možné rozdělit do několika kategorii podle různých kritérií. Například:\n\n\'\'Podle existence můžeme systémy rozdělit na:\'\'\n# \'\'\'Reálné\'\'\' (existující) systémy\n# \'\'\'Nereálné\'\'\' (fiktivní) systémy - používají se například v počítačových hrách\n\n\'\'Podle změn stavů na:\'\'\n# \'\'\'Statické systémy\'\'\' - nemění svůj stav v čase\n# \'\'\'Dynamické systémy\'\'\' - mění svůj stav v čase\n\nPro simulaci jsou zajímavé především dynamické systémy. Příkladem jednoduchého dynamického systému může byt supermarket se zákazníky, prodavači, zbožím, pokladnami, vozíky atd.\n\nMatematicky je systém dvojice S = {U, R}:\n# \'\'\'U\'\'\' - universum, množina všech prvků systému\n# \'\'\'R\'\'\' - množina všech relací, vazeb prvků\n\n\'\'Akvárko je systém složený ze stěn, vody, rybiček a všeho, co rybičky vyprděly. Vazby mezi rybičkami jsou takové, že velké rybičky žerou menší.\'\'\n\n# \'\'\'Isomorfní\'\'\' - ekvivalentní systémy, 1:1\n# \'\'\'Homomorfní\'\'\' - podobné systémy, N:1, tvorba homomorfních systémů je principem modelování.\n\n----\n\n======Model======\nNapodobenina systému jiným systémem — například (v našem případě výhradně) počítačovým programem. Model systému musí napodobovat všechny pro naše účely podstatné vlastnosti systému. Příkladem modelu může byt soustava diferenciálních rovnic popisující let rakety nebo její ekvivalent ve tvaru blokového schématu.\n\n----\n\n======Modelování======\nProces vytvářeni modelů systémů na základě našich znalosti. Tento proces je obecně velmi náročný a často vyžaduje znalosti z vice oborů. Kvalita vytvořeného modelu zásadním způsobem ovlivni výsledky získané experimentováním s modelem.\n\n----\n\n======Simulace======\nMetoda získáváni nových znalostí o systému experimentováním s jeho modelem. Pro účely simulace musí byt model popsán odpovídajícím způsobem – ne každý model je pro simulaci vhodný. Omezíme se pouze na simulaci na číslicových počítačích. Pro získání potřebných informaci obvykle potřebujeme opakovat simulační experimenty vícekrát s různými parametry.\n\n----\n\n==Princip modelování a simulace==\nCílem simulace je získat nove znalosti o zkoumaném systému. Abychom mohli provádět simulaci, je nutné vytvořit vhodný model tohoto systému. Postupujeme tak, že:\n# Nejdříve vytvoříme tzv. \'\'\'abstraktní model\'\'\', který nezahrnuje všechny naše znalosti o modelovaném systému, ale vybíráme jen ty vlastnosti, které jsou pro naše účely podstatné. Tím dosáhneme zjednodušení modelu na zvládnutelnou úroveň. Abstraktní model může mít například formu matematických rovnic.\n# Na základě abstraktního modelu pak vytváříme \'\'\'simulační model\'\'\', který už dále nic nezjednodušuje a musí zahrnovat všechny vlastnosti abstraktního modelu. Rozdíl mezi abstraktním modelem a simulačním modelem je pouze možnost prováděni experimentů – simulační model je spustitelný program, který počítá výsledky podle zadaného počátečního stavu, vstupů a parametrů modelu.\n# Se simulačním modelem provádíme \'\'\'simulační experimenty\'\'\' a jejich výsledky analyzujeme. Výsledkem jsou informace o chování systému, ze kterých jejich zobecněním získáme nové znalosti\n\n[[Soubor:Ims1.png]]\n\n----\n\n======Čas======\nBudeme rozlišovat tři pojmy:\n# \'\'\'Reálný čas\'\'\' - ve kterém probíhá skutečný děj v reálném systému\n# \'\'\'Modelový čas\'\'\' - časová osa modelu. Může být reálný, zrychlený, nebo spomalený.\n# \'\'\'Strojový čas\'\'\' - čas CPU spotřebovaný na výpočet programu u (závisí na složitosti simulačního modelu, nesouvisí přímo s modelovým časem).\n\n----\n\n======Klasifikace modelů======\nTredičně dělíme modely na:\n# \'\'\'Modely spojité\'\'\' - proměnné modelu mění svůj stav spojitě. Tyto modely jsou popsatelné například diferenciálními rovnicemi.\n# \'\'\'Modely diskrétní\'\'\' - stav modelu se mění skokově v diskrétních časových okamžicích. Příkladem takového modelu může byt například konečný automat.\n# \'\'\'Modely kombinované\'\'\' - – obsahuji spojité i diskrétní prvky současně v jednom modelu.\n\n----\n\n======Verifikace a validace======\n# \'\'\'Verifikace\'\'\' - Ověřujeme korespondenci simulačního a abstraktního modelu, tj. zpravidla izomorfní vztah mezi AM a SM. Jinými slovy je to kontrola, zda to, co jmse naprogramovali, odpovídá tomu, co jsme vymysleli a třeba načmárali na papír.\n# \'\'\'Validace\'\'\' - Ověřování validity (platnosti) simulačního modelu je proces, v němž se snažíme dokázat, že skutečně pracujeme s modelem adekvátním modelovanému systému. Jinými slovy chceme ověřit, zda model dává validní výsledky – takové, které by dávalo pozorování původního systému při stejných podmínkách. Validace je náročná. Nelze vyrobit model, který bude 100% validní, respektive ani u sebedokonalešího modelu nelze 100% validitu dokázat.\n\n----\n\n\n===Diskrétní simulace===\nSimulace diskrétních systémů. Diskrétním systémem myslíme takový systém, ve kterém nás nezajímá stav v jakémkoli okamžiku v čase, ale pouze v klíčových momentech. Čas je v diskrétních simulacích nerovnoměrný. Simulátor skáče v čase vždy k další události v čase.\n\n----\n\n======Proces======\nProces definujeme jako posloupnost událostí, které jsou postupně prováděny. Součástí popisu procesu jsou prostředky vyjadřující čekaní po zadanou dobu v modelovém čase, prostředky popisující čekaní ve frontě a podobně. Příkazy vyjadřující čekaní odděluji jednotlivé události v popisu procesu. \n\nProces může být například zákazník v obchodu a jeho posloupnost událostí je: vstup do obchodu, výběr položek k nákupu, zaplacení na pokladně, odchod z obchodu.\n\n# \'\'\'Kvaziparalelismus\'\'\' - V reálných systémech probíhají procesy paralelně – jejich činnost probíhá současně. Na jednoprocesorovém počítači to však není možné, proto vzniknul kvaziparalelismus, což je forma implementace paralelních procesů. Pokud má dojit k současnému provedení událostiněkolika procesy, provedou se v daném okamžiku modelového času, ale jedna po druhé (tj. nikoliv současně v reálném čase), a až se všechny porvedou, poté se posune simulační čas. Toto postupné provádění na jedné straně zjednodušuje implementaci simulačního systému, ale musíme počítat s tím, že pokud výsledek simulace závisí na pořadí těchto událostí, může vzniknout problém (který můžeme vyřešit přiřazením priorit procesům).\n\n----\n\n====Systém hromadné obsluhy - SHO====\nJsou to systémy obsahující zařízení, která poskytují obsluhu transakcím. Typický SHO obsahuje:\n\n# Transakce (procesy) a popis jejich příchodů. \n# Obslužné linky (více typů) a popis obsluhy. Jde o zařízení, do kterého proces vstoupí, vykoná zde pomyslnou činnost a následně ho opustí. Pokud je linka plná, proces může vstoupit do fronty.\n# Fronty různých typů, ve kterých transakce čekají\n\n----\n\n======Priority procesů======\nNěkteré procesy mohou mít vyšší prioritu než jiné. Rozlišujeme dva typy priority:\n# \'\'\'Slabá priorita\'\'\' (priorita procesu) - Při příchodu procesu se slabou prioritou k zařízení se nejprve dokončí obsluha procesu, který je uvnitř.\n# \'\'\'Silná priorita\'\'\' (priorita obsluhy) - Obsluha se přeruší a začne obsluha požadavku s vyšší prioritou obsluhy. Požadavek, jehož obsluha byla přerušena, buď:\n## odchází ze systému neobsloužen,\n## nebo byl umístěn do vnitřní fronty, a když je později obsluhován, tak:\n### obsluha pokračuje od přerušeného místa,\n### nebo začíná znovu od začátku.\n\n----\n\n=====Kalendář událostí=====\nŘídící mechanismus simulace. Pokaždé, když nějaký proces dokončí svou diskrétní činnost a „čeká“ na opětovnou činnost (například je ve frontě, v nějaké trvající obsluze nebo prostě čeká na nějaký stav systému), kalendář vybere proces, který má běžet. Pokud v aktuálním simulačním čase už žádný proces nemá naplánovanou aktivitu, posune se kalendář v čase k nejbližšímu budoucímu procesu a aktivuje ho. \n\n\'\'\'Kalendář je uspořádaná datová struktura, která obsahuje:\'\'\'\n# čas, kdy má událost nastat\n# proces, který se má probudit\n# případná priorita procesu.\n \n======Událost======\nPopisuje změnu stavu diskrétního systému. Forma popisu se liší podle použitého formalismu – například v Petriho síti je událost popsána přechodem, v konečném automatu hranou, v programovacím jazyce například několika příkazy. Událost je z hlediska doby trváni \'\'\'atomická operace\'\'\' – proběhne cela v jednom okamžiku modelového času (má nulovou dobu trváni). V simulačních systémech je obvykle implementace událostí triviální – jde o obyčejnou funkci (podprogram).\n\n----\n\n\n===Spojitá simulace===\nPokud potřebujeme simulovat systém se spojitými průběhy, použiváme spojitou simulaci. Spadá sem například fyzikální simulace pohybu vesmírných těles, elektrických obvodů atd. Stejně jako u diskrétních simulací je zde čas diskrétní. Rozdíl je však v tom, že výpočet stavu systému probíhá v daných intervalech, také krocích. Kroky jsou dané vrchním a spodním omezením – simulátor může v případě potřeby krok zmenšit nebo zvětšit.\n\nVýpočet stavu systému je často spojen s řešením diferenciálních funkcí. Např. při řešení fyzikálních modelů jsou jednotlivé prvky systému ve vztazích definovaných pomocí fyzikálních zákonů. Na počítači se diferenciální funkce řeší pomocí numerických metod. Funkce se přibližně proloží (aproximuje) polynomem a pak se extrapoluje výsledek v příštím integračním kroku.\n# \'\'\'Eulerova metoda\'\'\'\n# \'\'\'Metoda Runge-Kutta\'\'\'\n\nPokud je simulační čas od konce simulace vzdálený o malou část obvyklého derivačního kroku, přepočítá se poslední krok rovnou až do konce simulace.\n\n----\n\n\n===Kombinovaná simulace===\nJde o spojitou simulaci s (občasnými) diskrétními událostmi. Simulátor počítá spojité průběhy a kontroluje, zda nedošlo k nějaké diskrétní události.\n\n\'\'Příklad: Míček skáče po zemi. Jeho stoupání a klesání je spojitý průběh a počítá se spojitou simulací. Dopad míčku na zem, ztráta pohybové energie, změna směru pohybu – to je, pokud nezkoumáme fyzikální vlastnosti a pochody během odrážení míčku, diskrétní událost.\'\'\n\n======Řízení kombinované simulace======\nStejné jako spojitá simulace s následujícím rozdílem: Při každém integračním kroku simulátor kontroluje, jestli nedošlo k nějaké diskrétní události. Pokud ano, tak se vrátí o krok zpátky, zmenší velikost kroku a počítá znovu. V momentě, kdy už nelze krok zmenšit, dojde k diskrétní události a nastaví se opět původní velikost integračního kroku.\n\nTento princip je důležitý kvůli co nejpřesnějšímu zjištění, kdy přesně k diskrétní události došlo.','utf-8'),(1560,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n=== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ===\n\n----\n\n===== ZÁKLADNÍ KATEGORIE =====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA POUŽITÍ =====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n\n===== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (??%) =====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n===== PROVOZ A ÚDRŽBA =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(1561,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n=== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ===\n\n----\n\n===== ZÁKLADNÍ KATEGORIE =====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA POUŽITÍ =====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n\n===== AKCEPTAČNÍ TESTOVÁNÍ A INSTALACE (??%) =====\n\n• Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n===== PROVOZ A ÚDRŽBA (67%) =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'); INSERT INTO `text` VALUES (1562,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n=== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ===\n\n----\n\n===== ZÁKLADNÍ KATEGORIE =====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA POUŽITÍ =====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\n\nAKCEPTAČNÍ TESTOVÁNÍ - Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n===== PROVOZ A ÚDRŽBA (67%) =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(1563,'= ŽIVOTNÍ CYKLUS SOFTWARU =\n\n----\n\n=== VLASTNOSTI SOFTWAROVÉHO PRODUKTU ===\n\n----\n\n===== ZÁKLADNÍ KATEGORIE =====\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA POUŽITÍ =====\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\nAKCEPTAČNÍ TESTOVÁNÍ - Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n===== PROVOZ A ÚDRŽBA (67%) =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(1564,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku)\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\nobr\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(1565,'=Vata=\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\n[[Soubor:nasobeni_matic.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku)\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\nobr\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(1566,'','utf-8'),(1567,'=Vata=\n\n// Vypisek ke zkouzce z pradnetu IZG https://fituska.eu/download/file.php?id=8362\n\n\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\n[[Soubor:nasobeni_matic.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku)\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\nobr\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(1568,'','utf-8'),(1569,'=Vata=\n\n// Vypisek ke zkouzce z pradnetu IZG https://fituska.eu/download/file.php?id=8362\n\n\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\n[[Soubor:nasobeni_matic.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: přivrácené=====\n\nTakové, které má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku)\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n[[Soubor:Stinovani.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(1570,'=Vata=\n\n// Vypisek ke zkouzce z pradnetu IZG https://fituska.eu/download/file.php?id=8362\n\n\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\n[[Soubor:nasobeni_matic.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: Přivrácená=====\n(například plocha objektu)\n\nTaková, která má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n\nobr\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku)\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n[[Soubor:Stinovani.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(1571,'','utf-8'),(1572,'=Vata=\n\n// Vypisek ke zkouzce z pradnetu IZG https://fituska.eu/download/file.php?id=8362\n\n\n===Pojem: Homogení souřadnice===\n\n\'\'\'Zápis bodu:\'\'\'\n\n3D souřadnice P(x,y,z,w). W je údaj o tom jeslti je bod (w = 1) nebo jeslti se jedná o vektor (w = 0).\n\n\'\'Vyslětlení na 2D\'\'\n\nHomogení souřadnice pro bod s kartézskými souřadnicemi [x,y] je uspořádaná trojice [X,Y,w] pro kterou platí <m>x = X/w</m> a <m>y = Y/w</m>, \'\'\'w\'\'\' je \'\'\'váha bodu\'\'\'.\n\nProto u bodu bude 1 a vektor zapíšeme jako v = (x,y,0). (nebylo hlouběji vyvětleno)\n\nProč to dělění? => nikdy nesmím mít u bodu jinou hodnotu w než jedna a pokud mi po nějakých transformacích vyjde ve w něco jiného, tak tímto číslem všechny souřadnice vydělím => w = 1.\n\n===Transformace 3D=== \n\nznamená vynásobení vektoru maticí o rozměru 4x4. (transformace ve 2D je vynásobení maticí 3x3)\n\n\'\'Tohle je základ za nevědomost se třílí\'\'\n\nVypadá to asi takto:\n\n[[Soubor:3D_trans_obecne.jpg]]\n\n====Násobení matic====\n# První matice musí mít stejný počet řádků jako druhá.\n# Výsledná matice má pak rozměr \"počet řádku první\" x \"počet sloupců druhé\"\n\nJak obecne funguej ansobeni matice:\n\n[[Soubor:Matice obecne 2.JPG]]\n\n[[Soubor:nasobeni_matic.JPG]]\n\nJak se konkretne nasobi pri transformovani, priklad na posunuti:\n\n[[Soubor:Posunuti matice 2.JPG]]\n\n=Reprezentace 3D objektů=\n\n==Požadavky na 3D model==\n\n=====Obecnost=====\nPopis co nejrozsáhlejší třídy objektů.\n\n=====Úplnost=====\nÚplně popisuje daný objekt.\n\n=====Jednoznačnost=====\nLze vyhodnotit pouze jedním způsobem.\n\n=====Unikátnost=====\nJednomu tělesu odpovídá jeden model.\n\n=====Přesnost=====\nPřesnost popisu objektu.\n\n=====Regulérnost=====\nNemožnost vytvořit nereálnou reprezentaci.\n\n=====Konzistence vůči vybraným operacím=====\nVýsledkem operace pro tělesa stejné třídy je opět těleso této třídy.\n\n=====Kompaktnost=====\nMalá paměťová náročnost.\n\n=====Efektivnost zpracování=====\nMožnost efektivní implementace operací s tělesem.\n\n==Metody reprezentace==\n===Konstruktivní geometrie===\n\n= CSG = constructive solid geometry\n\nObjekt je popsán stromem, který se skládá z \n# 3D primitiv (na listech stromu)\n# transformací\n# booleovských operací (and, or ... v uzlech)\n\n\n\n[[Soubor:Kongo.jpg]]\n\n\nStrom pak musíme převést na nějaký hraniční model.\n\n=> vytvoříme si alternativní strom pracující s hranovou reprezentací - to je pouze pro účely zobrazení ať si s tím můžeme točit. Není úplně přesné, například kouli vyskládáme z trojúhelníků.\n\nPři změně modelu se musí přegenerovat celý strom, aby se to nedělalo takto dlouhým způsobem, použije se oktalový strom (rozsekávání krychle na čtvrtiny). V každé podkrychli budou jen informace o těch objektech, které jsou v té části prostoru.\n\n+ sousta dalších informací o těch stromech.\n\n===Šablonování===\nPohyb křivky nebo tělesa po zvolené trajektorii.\n\nTranslační: pohyb po přímce obyčejný\n\n[[Soubor:Translacni_obyc.jpg]]\n\nTranslační: pohy po přímce s proměnlivou profilovou křivkou\n\n[[Soubor:Translacni_promenlive.jpg]]\n\nTranslace podle úplně obecné křivky\n\n[[Soubor:Translacni_obecna_krivka.jpg]]\n\nRotační: \n\nVyužívá vlastnosti [[NURBS křívek]] reprezentovat přesně kružnici.\n\n[[Soubor:Sablona_rotace.jpg]]\n\n===Dekompoziční modely===\n\nNěkdy pojmenována jako Lego či L-rep, nebo výčtová či kostičková reprezentace, ch-rep, megablocks, voxlové modely...\n\nDiskrétní popis objektu dekompozicí na elementární objemové jednotky (krychle, hranoly).\n\n\'\'\'Pojem: Voxel\'\'\'\n\nVolumetric Pixel = objemový\n\nVolume rendering - dovoli mi nastavit mekym tkanim a kostem jinou barvu, pujde tak pekne viidet na rezu. Využívá se paprsků viz ray-cassing.\n\n[[Soubor:Dekompozice.jpg]]\n\n=====Objemové modely=====\n\nJsou vodné pro počítání například dynamická simulace mraků.\nVyužití u CT (medicína, strojírenství)\n\nTo jsou věci, na které drátové modely nestačí\n\n======Marching cubes======\nAlgoritmus, který dělá polygonální model z objemových dat.\n\n===Hraniční modely===\n\'\'\'= B-rep\'\'\' (jako border)\n\nObjekt popsán prostřednictvím svého povrchu pomocí vrcholů stěn a hran.\n\n[[Soubor:B-rep.jpg]]\n\nZahrnuje Drátový model, Polygonální a Spline model.\n\n=====Drátový model=====\n\nObjekty definovány pomocí vrcholů a hran.\nMá málo topologických informací => nejednoznačnost modelu.\nVhodné pouze pro rychlé orientační zobrazení objektů.\n\n=====Polygonální model=====\n\nPomocí vrcholů hran a stěn, většinou poskládáno z trojúhelníčků.\n\nJe jednoznačný, ale nepřesný, protože se provádí linenární aproximace povrchu.\n\nNutnost ověřovat regulérnost.\n\nJe vhodný pro HW implementaci. => perfektní pro interaktivní zobrazení.\n\n======Okřídlená hrana======\n\nDatová struktura pro reprezentaci polygonálního modelu\n\nJsou to tři seznamy (vrcholy, hrany, stěny)\n\n=====Hraniční spline=====\n\nVyjádření pomocí 3D splinových ploch\n\n=====Level of Detail=====\n\nZpůsob jak šetřit výpočet. \n\nObjekty, které jsou daleko není třeba vykreslovat tak podobně jako tz co jsou blízko, takže se stanoví několik úrovní podrobnosti a podle vzdálenosti od pozorovatele se použije ten či oný.\n\n===3D plochy===\n\nplocha definována řídící maticí a sítí řídících bodů.\n\nPro zobrazení s epoužívá převod na polygony nebo ray tracing.\n\nBikubické plochy:\n\n4x4 řídících bodů\n\nBeziérovy plochy:\n\ntaky 4x4\n\nobr\n\n===Implicitní plochy===\nVychází z obecnění potencionálního pole elementárních částic. Model je tvořen <b>kostrou</b>, kolem které je tvořeno <b>potencionální pole</b>. Povrch objektu je tam, kde je <b>intenzita pole</b> rovna nule. Pro zobrazení se používá převod na B-rep nebo raycasting/raytracing. Využívá se tzv. směšovací funkce (původně používána exponenciální funkce pro rozložení hustoty atomu vodíku). Využívá se také <b>koeficient</b>, který určuje vliv, dosah a sílu potenciálu prvku kostry.\n\nobr\n\n=Transformace=\n\nVyjádřené transformačními maticemi. \n\n==Posunutí==\n\n[[Soubor:Posunuti.jpg]]\n\n==Změna měřítka==\n\n[[Soubor:Zmena_meritka.jpg]]\n\n===V jiných směrech===\n\nPředpokládám, že se jedná o chyták, protože vyplněném 3 čísel v diagonále dosáhnu libovolného směru. \n\nPokud budu scalovat krychličku zůstane mi pořád pravoúhlá - může se mi z ní stát kvádr, ale deformovat jinak se nebude, to už by se jednalo o zkosení.\n\n==Zrcadlení==\n\nPodle souřadného systému:\n\n-1 v diagonále\n\nObecné:\n\nSpojení zrcadlení podle středu a jiné transformace (otočení, posunutá ... nebo oboje zároveň)\n\nPodle zákonitosti, že transformace lze libovolně skládat si to můžeme představit dvěma způsoby buď \"posunutím souřadnicového systému\" nebo posunutím objektu ke středu.\n\n==Rotace==\n===Rotace kolem os===\n\n[[Soubor:Rotace_kolem_osy.jpg]]\n\n===Rotace kolem obecné osy===\n\n\'\'Státnicově oblíbené\'\'\n\nZase několik transformací. \n\nOsu, podle které budu otáčet (zadána vektorem), musím zpracovat.\n\n# Vezmu bod na ose otáčení a posunu ho do počátku.\n# Rotací sklopit do jedné souřadné roviny\n# Rotací sklopit do jedné ze souřadných os předchozí roviny\n# Pak se provede rotace, kterou chceme provést\n# Provést inverzní transformace k původním třem, čímž to vrátím na původní místo, ale už zrotované\n\nCož se zapíše takto:\n\n[[Soubor:Obecna rotace.jpg]]\n\nPři takových to rotacích se můžou zmínit úhly alpha a beta, které jsou směrovými cosinusi při dvou rotacích (do souřadné roviny a do souřadné osy).\n\n====Kvaternion====\n\nSlouží pro otáčení krávy.\n\nVztah mezi dvěma vektory (podobně jako vektor je vztah mezi dvěma body).\n\n[[Soubor:Krava.jpg]]\n\nNástroj pro popis rotačních transformací.\n\nJejich výhodou je, že se dají dobře skládat mezi sebou.\n\nJe to vektor (pomocí homogení souřadnice) a úhel.\n\nUšetří výpočetní čas i místo úložiště, protože místo toho abychom násobily 5 matic 4x4 tak si poskládáme kvaterniony a až výsledný kvaternion převedeme na výslednou transformační rovnici a tím pádem ani neukládáme 5 matic, ale jen 1 a 5 matic 4x1. \n\n=====Další možnost=====\n\nRotace kolem osy procházející počátkem se dá rozložit na dílčí rotace kolem os X,Y a Z.\n\n==Zkosení==\n\n[[Soubor:Zkoseni_ve_smeru.jpg]]\n\n==Projekce==\n\n# Je taky tranformací!!!\n\n#Transformací ze 3D do 2D.\n\n# = Promítání\n\n# Při projekci dochází ke ztrátě informace.\n\n# Využívají se tzv. \'\'\'projekční paprsky\'\'\'. Paprsek promítá body na \'\'\'průmětnu\'\'\'.\n\n# Parelelní (rovnoběžná) vs. Perspektivní (středová) \n\n\'\'\'Na rovinnou průmětnu vs. na zakřivenou\'\'\'\n\nRovinná: úsečky zůstávají úsečkami => promítají se pouze jejich vrcholy (koncové body)\n\nZakřivená: úsečky se promítají jako křivky (rybí oko, panorama) => musí se promítnout každý bod.\n\n===Paralelní projekce===\n\n# Pomocí rovnoběžných paprsků\n# Lineární\n# \'\'\'Zachovává rovnoběžnost hran\'\'\'\n# vzdálenost od průmětny neovlivňuje velikost obrazu\n# Užívané v technice(CAD a podobné)\n\nNejčastěji se používá kolmé promítání = paprsky jsou kolmé k průmětně\n\nSpeciální jednoduchý případ je, když je průmětna rovnoběžná s některou rovnou souřadnicového systému. V takovém případě stačí zanedbat jednu souřadnici.\n\nPro ilustraci stránka ze slidů:\n\n[[Soubor:Kolma_projekce_do_XY.jpg]]\n\n\'\'\'Obecně:\'\'\'\n\nObecnou situaci musím pomocí transformací přenést do souřadného systému, kde je průmětna rovnoběžná s rovinou XY => provádí se \'\'\'složená lineární transformace\'\'\'\n\n===Perspektivní projekce===\n\n# Nelineární (paprsky z jednoho bodu - z oka pozorovatele)\n# \'\'\'Nezachovává rovnoběžnost hran\'\'\'\n# Použití: virutuální realita - hry, architektura ...\n# Vzdálenost od středu projekce ovlinňuje velikost průmětu\n# Odpovídá promítání v realitě\n\nPro projekci na průmětnu rovnoběžnou s rovinou XY vypadá transformační matice takto:\n\n[[Soubor:Projekce_jehlan.jpg]]\n\n\'\'\'Odvození matice:\'\'\'\n\nmatici odvodíme z parametrického zápisu úseček na paprscích. Začátek úsečky je na průmětně a konec je ve středu \n\n<m>x = x_0 - x_0u</m>\n\n<m>y = y_0 - y_0u</m>\n\n<m>z = z_0 - (z_0 + d)u</m>\n\nD je vzdálenost průmětny od středu.\nU je parametr, který udáva \"šikmost jehlanu\" v rozmezí 0 až 1. (Je to směrnice!)\n\nV rovině XY platí <m> z = 0 left u = z_0/(z_0 + d)</m>\n\nZ čehož po dosazení vyjde\n\n<m> x_per = x_0 1/{1+z_0/d} </m> a <m> y_per = y_0 1/{1+z_0/d}</m>\n\nTyto tři vztahy můžeme přepsat do matice tak, jak je uvedena výše.\n\n====Vícebodová perspektivní projekce====\n\nPromítat můžeme i z více středů. Průmětna pak protíná více stěn zároveň. Teoreticky můžeme mít až nekonečně-mnohobodovou perspektivu.\n\n[[Soubor:Vicebodova_projekce.jpg]]\n\nTransformační matice pro tříbodovou projekci pak bude vypadat takto:\n\n[[Soubor:Tribodova_projekce_matice.jpg]]\n\nU dvoubodové to bude obdobné, ale na souřadnici 4,1 bude nula.\n\n==Ořezávání==\n\n# Provádí se před projekcí. \n# Šetří výpočetní kapacitu.\n\nPojem: \'\'\'pohledový objem\'\'\'\n\nVe 2D se prostě nasadí rámeček na obraz u 3D se to udělá stejně, ale musí se stanovit ještě hloubka, do které se bude renderovat. => \'\'\'Přední a zadní ořezávací stěna\'\'\' mezi nimi je ten objem.\n\nPři ořezávání využíváme transformaci na \'\'\'jednotkovou krychli nebo komolý jehlan\'\'\' pro snadnější ořezávání. (pro paralelní vs. perspektivní projekci) => snadnější určování co je uvnitř a co je venku (porovnávání s hezčím číslem asi - nevysvětlil).\n\n=Viditelnost=\n\nŠetří výpočet\n# Nevykreslováním odvrácených stran objektů\n# Nevykreslování objektů skrytých jinými\n\n(ve zkratce nekreslí body, které jsou schovány za jinými body)\n\nJe potřeba vymyslet jednoduché HW aplikovatelné algoritmy.\n\nDva možné přístupy:\n\n# Objektové: Pro každý objekt scény hledá viditelné části. Složitost <m>n^2</m>\n# Obrazové: Pro každý pixel obrazu hledá viditelný objekt. Složitost <m>np</m>.\n\nMůže se využít jejich kombinace\n===Pojmy===\n\n=====Pojem: Normála=====\n\nVektor kolmý na tečnu v bodě.\n\n=====Pojem: Přivrácená=====\n(například plocha objektu)\n\nTaková, která má normálu směrem k pozorovateli\n\n=====Pojem: Viditelná plocha=====\n\nTaková plocha, která je přivrácená k pozorovateli\n\n===Viditelnost hran===\n\n# Hrana mezi viditelnými plochami je potenciálně viditelná.\n# Hrana mezi neviditelnými plochami je neviditelná.\n# Hrana mezi viditelnou a neviditelnou plochou je obrysová.\n\n==Vektorové algoritmy==\n===Robertsův algoritmus===\n# Získat viditelné a obrysové hrany.\n# Rozdělit na úseky konstantní viditelnosti (což jsou úseky na těchto hranách omezené jejich průsečíky s obrysovými hranami).\n# Testovat viditelnost úseků, podle vzdálenosti průsečíků a zakrytí.\n\n[[Soubor:Robertson.png]]\n\n===Plovoucí horizont===\n\nPoužívá se pro vykreslování 3D grafů.\n\nTakovýchto:\n\n[[Soubor:3D_graf.jpg]]\n\nNa graf se podívám přes přivrácenou stěnu například XZ.\n\nA nakrájím ho rovnoběžnou rovinou.\n\n[[Soubor:Rezani_grafi.JPG]]\n\nFialové vyčmárání je přivrácená stěna a čárečkami na ose X povedou řezy.\n\nKřivky, které budou na řezech pak promítneme do roviny YZ takto:\n\n[[Soubor:Plavouci_horizont.jpg]]\n\nVzhledem k tomu, že nyní máme pouze křivky, ale jedná se o vykreslování ploch musíme si zavést takzvaný \'\'\'horní a dolní horizont\'\'\'. \n\nNebudou se vykreslovat žádné body na dané souřadnici které jsou pod Horním horizontem a na dolním horizontem zároveň.\n\n==Rastrové algoritmy==\n===Malířův algoritmus===\n\n= depth sorting algorithm\n\nObjekty se vykreslují odzadu dopředu - seřazeny jsou podle vzdálenosti.\n\nRámcový postup:\n# Seřazení ploch podle jejich minimální Z souřadnice\n# Testování každé plochy, jestli nepřekrývá plochy bližší (pomocí testů překrývání)\n# Pokud nezjistíme překryv, vykreslíme a vyřadíme aktuální plochu ze seznamu\n# Opakované testování\n\n=====Testy překrývání ploch=====\n\n# Překrývání průmětů na XY (AB)\n# P1 leží v přivráceném poloprostoru P2(C)\n# Plocha P2 leží v odvráceném poloprostoru P1 (D)\n\n[[Soubor:Prekryvani_ploch.jpg]]\n\n\'\'\'!!! Problém u objektů, které se vzájemně překrývají !!!\'\'\'\n\nTakovéto objekty rozdělíme na dvě části (na dva objekty) a pokračujeme stejně.\n\n[[Soubor:Malir_deleni.jpg]]\n\n===Dělení obrazu===\n\nObsah okna postupně dělíme na čtvrtiny - okna (menší a menší), dokud není výsek vyplněn pouze jedním objektem.\n\nOkno může vykreslit v případech:\n\n# V do okna nezasahuje žádný objekt (1)\n# Do okna zasahuje pouze jeden objekt (2)\n# Do okna zasahují 2 objekty, ale jeden zcela překrývá druhý (3)\n\nV ostatních případech je potřeba dál dělit okno.\nUkončíme při velikosti okna 1px.\n\n[[Soubor:Deleni_obrazu.jpg]]\n\n===Z-buffer===\n\n= depth buffer\n\n\'\'\'Snadná implementace do HW => rychlé => používané\'\'\'\n\nKaždá plocha je zpracována pouze jednou.\n\nScéna se předzpracuje vyloučením odvrácených ploch například.\n\nPak už se jede blbuvzdorně pixel po pixelu například řádkovým algoritmem.\n\nPo průchodu dostane informaci o hloubkách (Z buffer), ke kterým musím přidat ještě informaci o barvách (color buffer). U obou se jedná o matici o velikosti obrazu v pixelech.\n\n[[Soubor:Z_a_collor_buffer.jpg]]\n\n===Ray-casting===\n\n= Vrhání paprsků z místa pozorovatele\n\nZ průsečíku paprsku s objekty se vybere ten nejbližší\n\nPomalý, ale kvalitní výsledek\n\nPaprsky můžou jít rovnoběžně, ale i z bodu.\n\nPřed-zpracovává se vyloučením odvrácených a zakrytých částí.\n\nDíky tomu, že má všechny průsečíky na paprsku může být použit pro speciální vizuální efekty (viz obrázek).\n\n[[Soubor:Ray_casting.jpg]]\n\n=Osvětlení a stínování=\n\nIdeálni odraz světla můžeme rozdělit na dvě formy. \n# Difuzní (kulový, odraz do všech směrů - paprske dopadne na bod a z bodu se stane malinkata žárovička, která svítí do koule :D) => matný vzhled \n# Zrcadlový (směrový, symetrický podle normály povrchu - takový jak jej známe z fyziky - zachová se úhel a odrazí se pouze jeden paprsek) => lesklý povrch s prasátky\n\nReálný odraz je smíšený z těchto dvou: difuze + superpozice zrcadlového odrazu => odrazové těleso (což je nějaká šiška - místo koule - protažená ve směru zrcadlového paprsku)\n\n\n==Osvětlovací modely==\n===Lambertův osvětlovací model===\n\nPouze difuze\n\nSe stejnou intenzitou do všech směrů. \n\nOvlivněno pouze intenzitou difuze.\n\n\'\'\'Lambertovo cosinovo pravidlo:\'\'\'\n\nIntenzita difuze záleží na úhlu dopadu paprsku\n\n[[Soubor:Lambert.jpg]]\n\n<m> I_D = I_L r_D cos phi</m>\n\n<m> I_D = I_L r_D(N L)</m>\n\nN a L jsou vektory normála a směr dopadajícího paprsku.\n\n===Phongův osvětlovací model===\n\nK Lambertovi přidává zrcadlovou složku (reflexi)\n\n[[Soubor:Phong.jpg]]\n\nKoeficient reflexe <m>r_S</m>\n\nKoeficient ostrosti <m>n_S</m>\n\nAmbientní složka světla <m>I_A</m>\n\n===BRDF===\n\nFyzikální model\n\nPrincip dvou směrové distribuční funkce. (z toho ten název)\n\nVýpočetně náročné.\n\nSvětlo má zadaný úhel k normále, ale taky úhel v prostoru (jakoby byl paprsek natočený)\n\nMožnost modelovat světelné zdroje, protože povrch sám o sobě může mít nějaou zářivost. Taky umí přenos světelné energie ve scéně.\n\nSložité i pro nás i pro počítač.\n\n==Stínování==\n\nAplikování na celé těleso. (předchozí bylo pouze na jeden bod)\n\n===Konstantní stínování===\n\n= Flat shading\n\nCelý trojúhelník vybarvíme barvou, kterou podle osvětlovacího modelu phonga vypočítáme pro prostředek.\n\nObjekt vypadá jeko poskládání z plošek\n\n===Gouraudovo stínování===\n\nSpočítat barvu ve vrcholech. Při renderování pak počítáme jaká barva bude v bodě podle toho jak blízko je k danému vrcholu. Využijeme lineární interpolace, kterou budeme počítat jednou pro každý bod na levé hraně trojúhelníku z vrcholu a levého spodního vrcholu. To samé pak na pravé hraně trojúhelníku a následně pro konkrétní bod uvnitř spočítáme hodnotu lineární interpolací hodnot na okraji řádků. \n\n===Phongovo stínování===\n\nVyužívá se interpolace normál - velmi dobré výsledky na zaoblených površích, protože se určí normála pro každý bod.\n\nNáročné na výpočet, v OpenGL se používají takzvané shadery.\n\n[[Soubor:Stinovani.jpg]]\n\n=Podrobnosti, které možná nejsou nutné=\n\n==Práce s kvaterniony==\n\nIN PROGRESS','utf-8'),(1573,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\n• Na zapamatování těchto pohledů jsme (xproch69 a xsmies00) vytvořily následující pomůcku. Když potkám chlapa, první, co je vidět, je jeho vzhled (struktura). Pokud vypadá dobře, pak mě zajímá, jak se projevuje (chování) a jestli není úplně blbej (v hlavě má nějaká data). Nakonec, když se zadaří, záleží už jen na tom, co má v kalhotech (kompatibilní rozhraní).\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n=====OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)=====\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n\'\'\'DIAGRAM TŘÍD (CLASS DIAGRAM)\'\'\'\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(1574,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\n• Na zapamatování těchto pohledů jsme (xproch69 a xsmies00) vytvořily následující pomůcku. Když potkám chlapa, první, co je vidět, je jeho vzhled (struktura). Pokud vypadá dobře, pak mě zajímá, jak se projevuje (chování) a jestli není úplně blbej (v hlavě má nějaká data). Nakonec, když se zadaří, záleží už jen na tom, co má v kalhotech (kompatibilní rozhraní).\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n=====OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)=====\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n=====DIAGRAM TŘÍD (CLASS DIAGRAM)=====\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n=====DALŠÍ DIAGRAMY=====\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n\'\'\'DIAGRAM PŘÍPADU UŽITÍ (USE CASE)\'\'\'\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n\'\'\'DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)\'\'\'\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n\'\'\'DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)\'\'\'\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n\'\'\'DALŠÍ DIAGRAMY\'\'\'\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(1575,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\n• Na zapamatování těchto pohledů jsme (xproch69 a xsmies00) vytvořily následující pomůcku. Když potkám chlapa, první, co je vidět, je jeho vzhled (struktura). Pokud vypadá dobře, pak mě zajímá, jak se projevuje (chování) a jestli není úplně blbej (v hlavě má nějaká data). Nakonec, když se zadaří, záleží už jen na tom, co má v kalhotech (kompatibilní rozhraní).\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n=====OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)=====\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n=====DIAGRAM TŘÍD (CLASS DIAGRAM)=====\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n=====DALŠÍ DIAGRAMY=====\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n=====DIAGRAM PŘÍPADU UŽITÍ (USE CASE)=====\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n\'\'\'SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)\'\'\'\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n=====DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)=====\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n=====DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)=====\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n=====DALŠÍ DIAGRAMY=====\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(1576,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\n• Na zapamatování těchto pohledů jsme (xproch69 a xsmies00) vytvořily následující pomůcku. Když potkám chlapa, první, co je vidět, je jeho vzhled (struktura). Pokud vypadá dobře, pak mě zajímá, jak se projevuje (chování) a jestli není úplně blbej (v hlavě má nějaká data). Nakonec, když se zadaří, záleží už jen na tom, co má v kalhotech (kompatibilní rozhraní).\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n=====OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)=====\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n=====DIAGRAM TŘÍD (CLASS DIAGRAM)=====\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit typy objektů v systému a jejich vztahy.\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n=====DALŠÍ DIAGRAMY=====\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n=====DIAGRAM PŘÍPADU UŽITÍ (USE CASE)=====\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n=====SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)=====\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n=====DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)=====\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n=====DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)=====\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n=====DALŠÍ DIAGRAMY=====\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(1577,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22\n\n\'\'\'Zpracovává se\'\'\': 15, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 08, 09, 25 \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 (10)\n\nKrasne se nam to tu plni!!!\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1578,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\n Hledání metodou půlení intervalu\n \n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\n HeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\n SelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\n Algoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n Problém obchodního cestujícího\n\n----\n\n==== Složitost, velikost a čas ====\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(1579,'== Paměťová složitost algoritmů ==\n\nPaměťová složitost (paměťové požadavky, prostorová složitost) vyjadřuje, kolik paměti algoritmus vyžaduje pro výpočet.\n\n\'\'\'In-situ\'\'\' (in-place) algoritmy nevyžadují žádnou paměť pro práci s daty a zpracují je primo na jejich místě. Například: ShellSort, MacLarenův algoritmus\n\n\n----\n\n== Časová složitost algoritmů ==\n \nFunkce vyjadřující počet kroků algoritmu. \n\n\'\'\'Krok algoritmu\'\'\' je operace proveditelná v konstantním (tj. na velikosti dat nezávislém) čase, patří mezi ně primárně aritmetické operace (sčítání, odčítání, násobení…), porovnání dvou hodnot a přiřazení (to však pouze pro jednoduché datové typy, nikoliv pro pole).\n\n\'\'\'Asymptotická časová složitost\'\'\' vyjadřuje porovnání algoritmu s jistou funkcí pro N blížící se nekonečnu.\n\n=== Omikron ===\n\n[[Soubor:29_omikron.jpg]]\n \n\'\'\'Popis\'\'\': horní hranice, maximální rychlost růstu funkce (na obrázku níže jako c2)\n\n\'\'\'Definice\'\'\': Zápis f(n) = Omikron(g(n)) označuje, že funkce f(n) roste maximálně tak rychle jako funkce g(n). Funkce g(n) je horní hranicí množiny takových funkcí, určené zápisem Omikron(g(n)).\n\n\n=== Omega ===\n\n[[Soubor:29_omega.jpg]] \n \n\'\'\'Popis\'\'\': dolní hranice, minimální rychlost růstu funkce (na obrázku níže jako c1)\n\n\'\'\'Definice\'\'\': Funkce f(n) roste minimálně tak rychle jako funkce g(n). Tedy g(n) je dolní hranicí množiny všech funkcí určených zápisem Omega(g(n)). \n\n\n=== Theta ===\n\n[[Soubor:29_theta.jpg]]\n\n\'\'\'Popis\'\'\': oznažuje třídu časového chování algoritmu (na obrázku níže jako f(n))\n\n\'\'\'Definice\'\'\': Funkce roste tak rychle jako funkce g(n). Tedy g(n) vyjadřuje horní a současně dolní hranici množiny funkcí, označených zápisem Theta(g(n)). \n\n[[Soubor:29_slozitost.JPG]]\n\n\'\'\'Rychlost algoritmu VS časová složitost\'\'\': To, jak rychle bude ve skutečnosti trvat výpočet algoritmu, závisí na N (počet zpracovávaných položek). Pro různé N jsou nejrychlejší algoritmy různých složitostí. Další skutečnosti, jako je například uspořádání zpracovaných dat, ovlivňují trvání výpočtu, ten ale vždy trvá minimálně Omega(g(n)) a maximálně Omikron(g(n)).\n\n\n\'\'\'Příklady složitostí\'\'\':\n\n- Theta(1) – konstantní \n\n- Theta(log(n)) – logaritmická (rychlé vyhledávací algoritmy) – základ logaritmu není podstatný\n\n Hledání metodou půlení intervalu \n\n- Theta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy) \n\n- Theta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\n HeapSort, MergeSort \n\n- Theta(n*n) – kvadratická (klasické řadící algoritmy)\n\n SelectSort, InsertSort, BubbleSort, ShellSort\n\n- Theta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy\n\n Algoritmus násobení matic velikosti N*N \n\n- Theta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n Problém obchodního cestujícího\n\n----\n\n==== Složitost, velikost a čas ====\n\nNásledující příklad demonstruje vliv řádu složitosti a velikost na celkový čas\npotřebný pro výpočet algoritmu. V horní části tabulky jsou hodnoty času\npotřebné pro algoritmus o daném řádu a dané velikosti zpracovávaných dat n.\n\nV dolní části tabulky jsou jako ukázka souvislosti řádu a času uvedeny maximální\nhodnoty velikosti dat n tak, aby algoritmus skončil za 1 s nebo za 1 minutu.\n\n[[Soubor:29.jpg]]','utf-8'),(1580,'= VLASTNOSTI SOFTWAROVÉHO PRODUKTU =\n\n----\n\n== ZÁKLADNÍ KATEGORIE ==\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n== VLASTNOSTI Z HLEDISKA POUŽITÍ ==\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n===== VLASTNOSTI Z HLEDISKA ZMĚN =====\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n=== PROBLÉMY PŘI VÝVOJI SW ===\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\nAKCEPTAČNÍ TESTOVÁNÍ - Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n===== PROVOZ A ÚDRŽBA (67%) =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(1581,'= VLASTNOSTI SOFTWAROVÉHO PRODUKTU =\n\n----\n\n== ZÁKLADNÍ KATEGORIE ==\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n== VLASTNOSTI Z HLEDISKA POUŽITÍ ==\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n== VLASTNOSTI Z HLEDISKA ZMĚN ==\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n== PROBLÉMY PŘI VÝVOJI SW ==\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n===== PŘÍČINY SELHÁNÍ SW PROJEKTŮ =====\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n===== KLÍČOVÉ FAKTORY ÚSPĚCHU =====\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n=== PROCES VÝVOJE ===\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n=== ETAPY ===\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n===== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) =====\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n===== ARCHITEKTONICKÝ NÁVRH (3.5%) =====\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n===== PODROBNÝ NÁVRH (3.5%) =====\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n===== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) =====\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n===== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) =====\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\nAKCEPTAČNÍ TESTOVÁNÍ - Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n===== PROVOZ A ÚDRŽBA (67%) =====\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n=== MODELY ===\n\n===== VODOPÁDOVÝ MODEL =====\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n===== ITERATIVNÍ MODEL =====\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n===== INKREMENTÁLNÍ MODEL =====\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n===== SPIRÁLOVÝ MODEL =====\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n===== RUP (RATIONAL UNIFIED PROCESS) =====\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n===== AGILNÍ METODOLOGIE =====\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(1582,'= VLASTNOSTI SOFTWAROVÉHO PRODUKTU =\n\n----\n\n== ZÁKLADNÍ KATEGORIE ==\n\n• \'\'\'GENERICKÝ SOFTWARE\'\'\': Je vyvinut a poté prodáván libovolnému zájemci, krabicový SW (off-the-shelf), často mezi ně patří operační systémy, kancelářské programy, prohlížeče, přehrávače, antiviry… Musí být velmi dobře otestován, protože po zahájení prodeje jsou opravy velmi obtížné.\n\n• \'\'\'ZÁKAZNICKÝ SOFTWARE\'\'\': Je šitý na míru zákazníkovi, obvykle velká firma potřebující SW pro specializovanou oblast. Typicky továrny, letadla, armáda, mobilní sítě… Je podstatně dražší, počítá se s úpravami a údržbou. Buď jde o objednávku u SW firmy, nebo firma přímo zaměstnává programátory.\n\n\n\n----\n\n== VLASTNOSTI Z HLEDISKA POUŽITÍ ==\n\n• \'\'\'SPRÁVNOST\'\'\': Míra, do jaké SW vyhovuje specifikaci.\n\n• \'\'\'SPOLEHLIVOST\'\'\': Míra, do jaké SW způsobuje při výpadku systému fyzické nebo ekonomické škody.\n\n• \'\'\'EFEKTIVNOST\'\'\': Míra splnění kritérií na využití zdrojů počítačového systému, na čas potřebný na realizaci a dalších kritérií spojených se samotným vývojem (např. náklady).\n\n• \'\'\'POUŽITELNOST\'\'\': Úsilí, které je nutné vynaložit na to, aby se dal SW používat.\n\n• \'\'\'BEZPEČNOST\'\'\': Míra odolnosti vůči neoprávněným zásahům do systému.\nVLASTNOSTI Z HLEDISKA PŘENOSU\n\n• \'\'\'PŘENOSITELNOST\'\'\': Úsilí, které je nutné pro přenos SW z jedné platformy na jinou.\n\n• \'\'\'ZNOVUPOUŽITELNOST\'\'\': Míra, do jaké je možné jednotlivé části SW znovu použít v dalších aplikacích.\n\n• \'\'\'INTEROPERABILITA\'\'\': Úsilí, které je potřebné k zajištění spolupráce systému s jinými systémy.\n\n\n\n----\n\n== VLASTNOSTI Z HLEDISKA ZMĚN ==\n\n• \'\'\'UDRŽOVATELNOST\'\'\': Úsilí, které je potřeba vynaložit na další vývoj a údržbu SW podle měnících se potřeb zákazníka a také v důsledku měnícího se okolí (např. změna legislativy).\n\n• \'\'\'PRUŽNOST (MODIFIKOVATELNOST)\'\'\': Úsilí nutné pro modifikaci výrobku při provozu.\n\n• \'\'\'TESTOVATELNOST\'\'\': Úsilí nutné pro testování vlastností SW.\n\n• \'\'\'DOKUMENTOVANOST\'\'\': Míra, do které jsou všechna rozhodnutí při vývoji zdokumentována a dokumentace je v průběhu všech etap vývoje kontinuální.\n\n\n\n----\n\n== PROBLÉMY PŘI VÝVOJI SW ==\n\n• \'\'\'SLOŽITOST\'\'\': Žádné dvě části nejsou stejné (zdroj dalších problémů jako např. komunikace v týmech; je náročné pochopit všechny možné stavy systému; problém s úpravami a rozšířeními…).\n\n• \'\'\'NEPŘIZPŮSOBIVOST\'\'\': Když se něco změní, je těžké přizpůsobit SW uživateli (přizpůsobí se uživatel).\n\n• \'\'\'NESTÁLOST\'\'\': Okolí má vliv na SW (přibývají požadavky; SW přežívá hardwarové prostředky) – SW stárne.\n\n• \'\'\'NEVIDITELNOST\'\'\': Neexistuje přijatelný způsob reprezentace SW výrobku, je obtížné určit, co v dané reprezentaci chybí. Ilustrací tohoto problému je syndrom 90% hotovo (programátoři mají velkou část průběhu vývoje SW dojem, že je hotovo již 90% - odvíjejí odhad od své představy, ne od skutečnosti).\n\n• \'\'\'SPECIFIKACE POŽADAVKŮ\'\'\': Zákazník nemá jasnou a ucelenou představu, formuluje požadavky nejasně a neúplně, přirozeným jazykem, požadavky se mění. SW inženýr má problém pochopit zákazníkův obor.\n\n• \'\'\'NÁCHYLNOST K CHYBÁM\'\'\': Mnoho chyb se může projevit až při provozu, opravy vedou k dalším chybám.\n\n• \'\'\'PRÁCE V TÝMU\'\'\': Komunikační problém, obtížná organizace a plánování (produktivita programátorů se často výrazně liší).\n\n• \'\'\'NÍZKÁ ZNOVUPOUŽITELNOST\'\'\': Často se zbytečně vyvíjí SW, který již byl vytvořen (nebo jeho části).\n\n• \'\'\'PROBLÉM MÍRY\'\'\': Některé metody na řešení malých problému nelze použít na velké a naopak.\n\n• \'\'\'DOKUMENTACE\'\'\': S nárůstem velikosti SW roste i objem a rozmanitost dokumentace, horší se aktuálnost, úplnost i konzistence.\n\n• \'\'\'OPOTŘEBOVÁNÍ\'\'\': Přidávání funkcí a oprava chyb vede k postupné degradaci struktury a nespolehlivosti. \n \n[[Soubor:30_opotrebovani_SW.JPG]]\n\n\n\n----\n\n== PŘÍČINY SELHÁNÍ SW PROJEKTŮ ==\n\n• neúplnost nebo nejasnost požadavků (13,1%) \n\n• nedostatek zájmu a podpory ze strany uživatele (12,4%)\n\n• nedostatek zdrojů, tj. podhodnocený rozpočet a krátké termíny (10,6%)\n\n• nerealistické očekávání (9,9%)\n\n• malá podpora od vedení dodavatele nebo odběratele (9,3%)\n\n• změna požadavků a specifikace (8,7%)\n\n• nedostatečné plánování (8,1%)\n\n• vyvíjený systém už není potřeba (7,5%)\n\n\n\n----\n\n== KLÍČOVÉ FAKTORY ÚSPĚCHU ==\n\n• zájem, zapojení uživatelů\n\n• podpora vedení zákazníka\n\n• jasně definované požadavky\n\n• dobré plánování\n\n• realistické očekávání\n\n• správná dekompozice úlohy\n\n• kompetentnost zúčastněných\n\n\n\n----\n\n== PROCES VÝVOJE ==\n\n• Potřeby uživatele se transformují na požadavky na SW, na jejich základě je vytvořen návrh systému, ten je implementován, testován a předán uživateli.\n\n• Zapojeni jsou: zákazník (platí, specifikuje požadavky), dodavatel (vyrábí SW), uživatel (používá SW).\n\n• \'\'\'SW PROCES\'\'\': Definuje kdo, kdy a co má dělat pro dosažení cíle.\n\n• \'\'\'DEKOMPOZICE\'\'\': Složitý problém se rozloží na více jednodušších podproblémů. To umožňuje zapojení více lidí, zjednodušuje problémy, celý systém je hotov rychleji, nevýhodou je nutnost definice rozhraní.\n\n\n\n----\n\n== ETAPY ==\n\n• V závorce je uveden podíl úsilí (investovaného času a peněz).\n\n\n=== ANALÝZA A SPECIFIKACE POŽADAVKŮ (8%) ===\n\n• Získáváme požadavky, analyzujeme, definujeme, specifikujeme (pokoušíme se získat strukturované, jasné, úplné a konzistentní požadavky). \n\n• Studie vhodnosti řeší, zda má smysl se do projektu pouštět. \n\n• Plánuje se akceptační testování (testování uživatelem).\n\n• Požadavky: \n\n1) funkcionální\n\n2) na provoz systému\n\n3) na výsledný systém (počítačové a programové vybavení, spolehlivost, \nodolnost, přenositelnost…)\n\n4) na vývojový proces\n\n5) na rozhraní\n\n6) externí (legislativní, etické…)\n\n• Specifikace požadavků:\n\n1) interview\n\n2) dotazníky\n\n3) studium dokumentů\n\n4) pozorování, přímá účast v provozu firmy\n\n5) analýza existujícího SW\n\n\n=== ARCHITEKTONICKÝ NÁVRH (3.5%) ===\n\n• Dekompozice vyžaduje vymezení funkcionality jednotlivých podsystémů a definování vztahů mezi nimi.\n\n• Plánuje se testování celého systému (integrace podsystémů).\n\n• Plánuje se postup nasazení do provozu a zaškolování uživatelů.\n\n\n=== PODROBNÝ NÁVRH (3.5%) ===\n\n• Specifikuje SW součásti, vybírá algoritmy, funkce, logickou a fyzickou strukturu dat, způsob řešení chyb.\n\n• Plánuje se práce na implementaci součástí, požadavků na lidské a další zdroje, odhad trvání a nákladů.\n\n• Plánuje se testování součástí. \n\n\n=== IMPLEMENTACE A TESTOVÁNÍ SOUČÁSTÍ (12%) ===\n\n• Výběr programovacího jazyka dle zkušenosti programátorů, vhodnosti, dostupnosti, rozšiřitelnosti, přenositelnosti, závislosti na HW, rozsahu knihoven, ceny vývojového prostředí, standardů programovacího jazyka a dle požadavků zákazníka.\n\n• Programová realizace SW součástí, vypracování dokumentace k součástem a jejich testování.\n\n• Implementace metodou zdola nahoru (nejnižší úrovně, které jsou později spojeny) nebo shora dolů (nejdříve nejvyšší úroveň, chyby jsou odhalené brzy, ale logika systému se testuje vícekrát) – v praxi kombinace.\n\n• Validace (ověření, že SW splňuje potřeby uživatele) a verifikace (vyhovuje specifikaci, je vytvářen správně a bez chyb).\n\n\n=== INTEGRACE A TESTOVÁNÍ SYSTÉMU (6%) ===\n\n• Spojení součástí, objevení nových chyb, které nebylo možné odhalit izolovaným testováním.\n\nAKCEPTAČNÍ TESTOVÁNÍ - Uživatel systém otestuje a na základě toho se zákazník rozhodne o převzetí nebo formuluje nedostatky.\n\n• Až při této etapě tvůrce SW ocení pečlivost při plánování a analýzách z předchozích kroků.\n\n=== PROVOZ A ÚDRŽBA (67%) ===\n\n• Vyžaduje průběžné opravy nově nalezených chyb, přidávání nových funkcí, přizpůsobování měnícím se požadavkům.\n\n\n\n----\n\n== MODELY ==\n\n=== VODOPÁDOVÝ MODEL ===\n\n• Etapy jsou řazeny za sebou, další začne po ukončení předchozí. Je to základ, nejstarší a nejpřirozenější.\n\n• Problémem je, pokud nejsou stanoveny všechny požadavky na začátku, na konci jsou pak nutné drastické a obtížné úpravy. Tím hodně naroste čas potřebný na dokončení i náklady.\n\n[[Soubor:30_vodopadovy_model.JPG]]\n \n\n=== ITERATIVNÍ MODEL ===\n\n• Každá iterace je instance vodopádového modelu, umožňuje nalézt nedostatky dříve bez narušení plánu.\n\n• Problémem je, že vývoj je nutné rozdělit do iterací, což může vést k horšímu návrhu systému.\n\n• S – specifikace požadavků, N – návrh, I – implementace, T – testování.\n \n[[Soubor:30_iterativni_model.JPG]]\n\n\n=== INKREMENTÁLNÍ MODEL ===\n\n• Na základě celkové specifikace jsou stanoveny ucelené logické části systému, které se uživateli předávají postupně. Vývoj je podobný iterativnímu modelu, ale nezhoršuje návrh systému.\n\n\n=== SPIRÁLOVÝ MODEL ===\n\n• Opakuje jednotlivé kroky vždy na vyšším stupni zvládnuté problematiky. Uživatel dostává k vyzkoušení nikoli omezeně funkční program, ale prototyp.\n\n• Spustitelné verze existují už od začátku, chyby jsou odhaleny velmi brzy.\n\n• \'\'\'PROTOTYP\'\'\': Verze programu s omezenou funkcionalitou, která se po použití zahodí a vytváří se znova – to přispívá k jednoduššímu a ideově čistšímu systému (ovšem spotřebuje náklady na vývoj).\n \n[[Soubor:30_spiralovy_model.JPG]]\n\n\n=== RUP (RATIONAL UNIFIED PROCESS) ===\n\n• Výsledek výzkumu velkých firem koordinovaný firmou Rational.\n\n• Založený na iteračním způsobu (po každé iteraci je k dispozici spustitelný kód).\n\n• Důraz na:\n\n1) vizualizace pomocí UML (Unified Modelling Language) – diagramy případů užití, analytických tříd, interakce, aktivit…\n\n2) průběžnou kontrola kvality\n\n3) řízení změn\n\n4) využívání existujících komponent\n\n\n=== AGILNÍ METODOLOGIE ===\n\n• Klasické metodologie se vyvíjely dlouho a zmohutněly, takže kvalitu menšího produktu naopak snižují a byrokratická pravidla vývoj prodražují. Na malé a neobvyklé problémy se používají agilní metodologie, které kladou důraz na člověka jako určující faktor kvality.','utf-8'),(1583,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n[[26 Datové a řídicí struktury|26]],\n[[27 Vyhledávání a řazení|27]]\n\n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n[[24 Řešení úloh|24]] ,\n\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]]\n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n\nEnqueued:\n\n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1584,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\n\n\n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\n\n[[24 Řešení úloh|24]] ,\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\n[[28 HTML a Javascript|28]], \n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nEnqueued:\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1585,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\n[[24 Řešení úloh|24]] ,\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\n[[28 HTML a Javascript|28]], \n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nEnqueued:\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1586,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n\n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\nISS, GRFIKA: \n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]]\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n[[28 HTML a Javascript|28]], \n \nSW ING:\n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\nEnqueued:\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1587,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\nNauceno:\n\nRozuceno:\n\n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\nISS, GRFIKA: \n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]]\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n[[28 HTML a Javascript|28]], \n \nSW ING:\n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\nEnqueued:\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\nZoufalstvi:\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1588,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\nISS, GRFIKA: \n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]]\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n[[28 HTML a Javascript|28]], \n \nSW ING:\n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1589,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\nISS, GRFIKA: \n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]]\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n[[28 HTML a Javascript|28]], \n \nSW ING:\n\n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1590,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n[[18 Číselné soustavy a převody mezi nimi|18]] ,\n\nISS, GRFIKA: \n\n[[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n[[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]]\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n[[28 HTML a Javascript|28]], \n \nSW ING:\n\n[[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n[[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1591,'== ZNAČKOVACÍ JAZYKY ==\n\n• Jsou nástrojem pro vkládání dodatečných informací do běžného textu. Umí zpracovat části obecného a části strukturovaného textu, který je určen pro zpracování počítačem. Obecný text převládá a speciální části jsou ohraničeny (u klasického programovacího jazyka je to přesně naopak).\n\n• Jsou založeny na gramatice, která je definována jako konečná množina gramatických pravidel, které generují řetězce daného jazyka.\n\n==== PROCEDURÁLNÍ ZNAČKA ====\n\n• Definuje pro prvek konkrétní akci, která se má s prvkem provést (vycentrovat, nastavit velikost písma…) a má pevný význam (sémantiku). Na tomto principu funguje HTML.\n\n==== DEKLARATIVNÍ (UNIVERZÁLNÍ) ZNAČKA ==== \n\n• Definuje prvek jako logickou část v rámci značkovaného textu (jde o jméno, telefon osoby...), význam značky není přesně daný a až při zpracování se bere ze souboru, kde je definovaný. \n\n• Takto funguje XML a vyžaduje pak DTD (Document Type Definition), který definuje výslednou strukturu dokumentu. To umožňuje hromadné zpracování textu a nezávislé zpracování částí textu. Velmi snadno lze také detekovat poškozené nebo neúplné části.\n\n• SGML (Standars Generalized Markup Language) je značkovací metajazyk umožňující definovat značkovací jazyky jako svoje vlastní podmnožiny (vchází z něj HTML, DocBook a další). Jeho základní vlastnosti jsou: upřednostňuje deklarativní značkování, umožňuje definovat typy dokumentů a je nezávislý na technickém vybavení počítače.\n\n----\n\n== HTML (HYPERTEXT MARKUP LANGUAGE) ==\n\n• HTML je typem dokumentu SGML, kde je značkám přiřazena sémantika hypertextového dokumentu v prostředí webu (WWW – World Wide Web).\n\n• Výsledná aplikace používá další formální jazyky, jako jsou skriptovací jazyky (JavaScript), kaskádové styly dokumentů (CSS) a další (např. pro kódování různých jazyků).\n\n==== PRAVIDLA HTML ====\n\n• Jednotlivé značky (tagy) jsou ohraničeny úhlovými závorkami (< a >). \n\n• Existují otevírací (<<nowiki />h1>) a uzavírací značky (<<nowiki />/h1>), které dohromady tvoří element (prvek) dokumentu.\n\n• Některé značky jsou nepárové a píšou se jako <<nowiki />img ... > nebo <<nowiki />img ... />, <<nowiki />br> nebo <<nowiki />br/> - další řádek. \n\n• Dále obsahují atributy, které zpřesňují vlastnosti elementu a píšou se ve formátu atribut=“hodnota“ a oddělují se mezerami - <<nowiki />form action=\"skript.php\" method=\"get\"> ... \n\n• Elementy mohou být vnořené.\n\n====== STRUKTURA DOKUMENTU ======\n\n• Deklarace \'\'\'DTD\'\'\' (povinná až od verze 4.01) - <<nowiki />!DOCTYPE ... >.\n\n• \'\'\'KOŘENOVÝ ELEMENT\'\'\' reprezentující celý dokument - <<nowiki />html> ... <<nowiki />/html>.\n\n• \'\'\'HLAVIČKA\'\'\' dokumentu obsahující metadata, která určují vlastnosti celého dokumentu (název, jazyk, kódování, <<nowiki />style> - odkaz na CSS soubor se stylem…) - <<nowiki />head> ... <<nowiki />/head>.\n\n• \'\'\'TĚLO\'\'\' dokumentu obsahující vlastní text - <<nowiki />body> ... <<nowiki />/body>.\n\n====== ZNAČKY (TAGY) ======\n\n• \'\'\'STRUKTURÁLNÍ ZNAČKY\'\'\' rozvrhují strukturu dokumentu.\n\n<<nowiki />h1>, <<nowiki />h2>, ... - nadpisy\n\n<<nowiki />p> - odstavec, <<nowiki />span> - úsek textu, <<nowiki />div> - oddíl textu\n\n<<nowiki />ol> - číslovaný seznam, <<nowiki />ul> - odrážkový seznam, <<nowiki />li> - položka seznamu\n\n<<nowiki />table> - tabulka, <<nowiki />tr> - řádek tabulky, <<nowiki />td> - buňka tabulky, <<nowiki />th> - hlavička tabulky\n\n<<nowiki />frame> - rám (umožňuje rozdělit okno prohlížeče na několik částí zobrazující různé stránky)\n\n• \'\'\'POPISNÉ (SÉMANTICKÉ) ZNAČKY\'\'\' popisují povahu obsahu elementu.\n\n<<nowiki />title>, <<nowiki />adress>, <<nowiki />q> - citace ...\n\n• \'\'\'STYLISTICKÉ ZNAČKY\'\'\' určují vzhled elementu. Je snaha tyto značky nahradit CSS souborem, který popisuje vzhled dokumentu odděleně od jeho textu, protože oddělení způsobí, že jde vlastnost elementu změnit jen na jednom místě v textu a text HTML souboru se pak lépe zpracovává i jinými způsoby než při zobrazení na obrazovce počítače (mobilní telefony, tisk, alternativní prohlížeče pro postižené...).\n\n<<nowiki />b> - tučné písmo, <<nowiki />i> - kurzíva, <<nowiki />u> - podtržení\n\n• \'\'\'ZNAČKY FORMULÁŘE\'\'\' dovede HTML zpracovat a prvky vykreslit, jejich další zpracování ale zajišťuje skript serveru (např. PHP).\n\n<<nowiki />form> - formulář, má metody get (posílaná data jsou vidět v řádce prohlížeče) a post (jsou skryta)\n\n<<nowiki />input> - vstup typu text, password (skrývá písmena), radio (kulatý přepínač), checkbox (zatrhávací políčko), submit (odesílací tlačítko)\n\n<<nowiki />textarea> - velké vstupní textové pole\n\n<<nowiki />select> - výběrové pole, <<nowiki />option> - volba v poli\n\n<<nowiki />label> - popis pole\n\n<<nowiki />button> - tlačítko\n\n• <<nowiki />!-- ... --> - komentář\n\n• <<nowiki />br> - řádkový zlom\n\n• <<nowiki />hr> - linka\n\n• <<nowiki />img src=...> - obrázek\n\n• <<nowiki />a href=... > - odkaz\n\n• <<nowiki />?php kód v jazyce php ?>\n\n• <<nowiki />script type=\"text/javascript\"> kód javascriptu <<nowiki />/script>, jinak lze použít atribut src pro připojení externího souboru\n\n== JAVASCRIPT ==\n\n• Interpretovaný (nemusí se kompilovat) objektově orientovaný skriptovací jazyk (navržen s ohledem na snadné ovládnutí a rychlý a pohodlný vývoj programů).\n\n• Klientská verze je součástí většiny prolížečů.\n\n• Slouží k přidání dynamiky do stránek.\n\n• Jádro jazyka na úrovni syntaxe je podobné C, C++ nebo Javě – jinak ale nemá s Javou nic společného (nejde o jinou verzi Javy). Z jazyka Perl přebírá regulární výrazy a práci s poli.\n\n• Vznikal pod názvem LiveScript, na JavaScript byl přejmenován před uvedením na trh, v produktech Microsoft je někdy jako Jscript nebo ECMAScript. Standard jádra jazyka definovala organizace ECMA.\n\n• Má potlačenou typovou kontrolu.\n\n• Nemá zcela ustálený název ani definici.\n\n• Identifikátory a klíčová slova jsou case-sensitive a používají písmena, čísla, podtržítko a dolar.\n\n• Funguje pouze v prohlížeči a je možné ho zakázat, různé verze prohlížečů vedou k častým chybám. \n\n• Kromě cookies neumí přistupovat k souborům a systémovým objektům ani žádná data uložit.\n\n• Objektovost určuje hlavně uspořádání vlastností a příkazů jazyka. Používá pouze jednoduchou dědičnost. Neexistují třídy, ale používají se konstruktory definované jako Function (tedy jde o funkce) a základní konstruktor Object (vše se dědí z něj).\n\n• Umí použít objekty okna prohlížeče (window), k prvkům stránky HTML (window.document), k zabudovaným objektům (Date, Math, string) a k dalším vytvořeným objektům.\n\n• Příkazy JavaScriptu: jednoduché, výrazové, složené, bloky, podmíněné, přepínač, cykly (break a continue), with (výjimky a jejich zachytávání) a návěští.\n\n• AJAX umožňuje komunikaci se serverem bez nutnosti reloadu stránky (funguje asynchonně – zatímco se jeden požadavek zpracovává, je možné odeslat další).\n\n==== KLIENTSKÝ JAVASCRIPT ====\n\n• Vznikne integrací do prohlížeče, používá objektový model dokumentů DOM (specifikace definovaná organizací W3C – World Web Consorcium, bohužel se moc nepoužívá a vznikají rozdíly v prohlížečích). Použitím DOM lze dosáhnout dynamického chování webových stránek (DHTML – Dynamic HTML).\n\n• Jádro jazyka (obohacené o další knihovny) lze použít i mimo prohlížeče \nnapř. formou Script Hostingu (technologie umožňující MS Windows interpretaci skriptovacích jazyků).\n\n• Globálním objektem je okno prohlížeče Window, prohlížeč generuje události, které indikují chování okna a aktivity uživatele (model programování řízený událostmi – klávesy, pohyb myši…). Všechny globálně deklarované proměnné jsou proměnné okna Window a oproti ostatním objektům má okno méně vlastností. Nejpoužívanějším objektem je pak objekt Document.','utf-8'),(1592,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]] ,\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] ,\n[[26 Datové a řídicí struktury|26]]\n[[27 Vyhledávání a řazení|27]], \n[[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n [[28 HTML a Javascript|28]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], \n[[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[19 Boolovy algebry|19]]\n[[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1593,'== JAZYK UML ==\n\n• Je založen na objektovém přístupu a používá vysokou míru abstrakce.\n\n• Vytváří grafický popis nezávislý na implementačním jazyce (ale teoreticky může být použit pro automatické generování kódu).\n\n• UML operuje s pojmem pohled (view). Pohled systému je projekce systému na jeden z jeho relevantních aspektů (zaměřuje na příslušný aspekt a ignoruje ostatní). \n\n• Je vhodné vytvářet několik různých pohledů na tentýž systém.\n\n• Je jednou z částí metodiky vývoje softwaru RUP (Rational Unified Process).\n\n• Obsahuje prvky (strukturní, chování, seskupování, doplňkové) a vztahy (asociace, závislost, agregace/kompozice, generalizace, realizace).\n\n==== ZÁKLADNÍ POHLEDY ====\n\n• Na zapamatování těchto pohledů jsme (xproch69 a xsmies00) vytvořily následující pomůcku. Když potkám chlapa, první, co je vidět, je jeho vzhled (struktura). Pokud vypadá dobře, pak mě zajímá, jak se projevuje (chování) a jestli není úplně blbej (v hlavě má nějaká data). Nakonec, když se zadaří, záleží už jen na tom, co má v kalhotech (kompatibilní rozhraní).\n\nSTRUKTURÁLNÍ POHLED (STRUCTURAL VIEW)\n\n• Popisuje vrstvu mezi objekty a třídami, jejich asociace a možné komunikační kanály.\n\nPOHLED CHOVÁNÍ (BEHAVIOR VIEW)\n\n• Popisuje, jak systémové komponenty (objekty) interagují, a charakterizuje reakce na vnější systémové operace.\n\nDATOVÝ POHLED (DATA VIEW)\n\n• Popisuje stavy systémových komponent (objekty) a jejich vazby.\n\nPOHLED ROZHRANÍ (INTERFACE VIEW)\n\n• Je zaměřeno na zapouzdření systémových částí a jejich potenciální použití okolím systému.\n\n----\n\n== UML DIAGRAM ==\n\n==== STATICKÉ MODELY (STRUKTURA) ====\n\n=====OBJEKTOVÝ DIAGRAM (OBJECT DIAGRAM)=====\n\n• Zachycuje konkrétní instance tříd a jejich vazby v určitém čase či podmínce.\n\n• Obrázek 1 znázorňuje třídu Účet a její dvě instance honzůvÚčet a aleninÚčet. Vztah třída/objekt je naznačen závislostí instantiate. Jak můžeme vidět, definuje třída Účet tři instanční proměnné (proměnné objektu) a dvě metody (uložit a vybrat). Identifikace objektu sestává ze jména třídy, které je instancí (za dvojtečkou) a případného jména objektu (před dvojtečkou).\n\n• Obrázek 2 zobrazuje vztahy mezi čtyřmi objekty. Objekt sjezdařskýKlub (instance třídy Klub) má několik členů – jim, honzik a bernard (instance třídy Osoba). Uvedený vztah mezi objekty je znázorněn asociací. Můžeme vidět, že např. jim hraje v tomto vztahu, v aktuálním čase či podmínce, úlohu předsedy klubu.\n \n[[Soubor:31_07.JPG]]\n\n[[Soubor:31_08.JPG]]\n\n=====DIAGRAM TŘÍD (CLASS DIAGRAM)=====\n\n• Představuje statický pohled na modelovaný systém a jeho úkolem je znázornit \'\'\'typy objektů v systému a jejich vztahy.\'\'\'\n\n• Každá relace (vztah) může být řiditelná. Řiditelnost je zobrazena šipkou a označuje primární objekt v relaci. U vztahu zobecnění směr šipky značí směr postup od speciálnějšího k obecnějšímu. U závislosti používání směr šipky označuje objekt, který je používán, na kterém závisí druhý objekt ve vztahu.\n\n• Vztahy:\n\n1) ASOCIACE (association) – zachycuje vztahy a informace mezi třídami – identifikuje vztah (v obrázku 1 níže zaměstnání, bydliště, sídlo), váže k sobě instance více tříd (osoba a společnost), určuje násobnost vztahu (0, 1, n/*) a určuje roli objektu ve vztahu (zaměstnavatel, zaměstnanec). Asociaci je možné povýšit na třídu (obrázek 2). \n\n[[Soubor:31_16.JPG]]\n\n[[Soubor:31_17.JPG]]\n\n2) KOMPOZICE A AGREGACE (composition, aggregation) – spojení prvků, kde složený objekt může nebo nemůže existovat bez svých částí\n\n3) ZÁVISLOST (dependency) – stereotypy (use), objekt nebo třída vyžaduje jiný objekt nebo třídu\n\n4) ZOBECNĚNÍ (generalization) - dědičnost\n\n5) REALIZACE (realization) – vztah třídy a rozhraní (třída s množinou operací)\n\n=====DALŠÍ DIAGRAMY=====\n\n• Diagram komponent (component diagram)\n\n• Diagram nasazení (deployment diagram)\n\n• (Profile Diagram)\n\n• (Composite Structure Diagram)\n\n• (Package Diagram)\n\n----\n\n==== DYNAMICKÉ MODELY (CHOVÁNÍ) ====\n\n=====DIAGRAM PŘÍPADU UŽITÍ (USE CASE)=====\n\n• Jeden případ užití je chápán jako funkce, kterou systém vykonává jménem jednotlivých účastníků nebo v jejich prospěch.\n\n• Každý případ užití má svůj název, jednoznačný identifikátor a specifikaci.\n\n• Diagram znázorňuje:\n\n1) hranice navrhovaného/zkoumaného systému\n\n2) účastníky analyzovaných případů užití\n\n3) analyzované případy užití\n\n4) interakce mezi aktéry a případy užití\n\n[[Soubor:31_01.JPG]]\n\nZOBECNĚNÍ ÚČASTNÍKA (OBRÁZEK 1 A 2) A ZOBECNĚNÍ PŘÍPADU UŽITÍ (OBRÁZEK 3)\n\n[[Soubor:31_02.JPG]]\n[[Soubor:31_03.JPG]]\n[[Soubor:31_04.JPG]]\n\n• Definujeme obecného aktéra Kupující, jeho speciálnější variantou je Zákazník mající stejné postavení, jako ObchodníZástupce, který může navíc vypočítat odměnu.\n\nRELACE <<INCLUDE>> A <<EXTEND>>\n\n[[Soubor:31_05.JPG]]\n[[Soubor:31_06.JPG]]\n\n• <<INCLUDE>>: Obrázek 1 vyjadřuje situaci, kdy jeden případ užití zahrnuje v sobě jeden či více jiných případů užití. Příklad uvedený na následujícím diagramu zobrazuje případy změnit, prohlížet a vymazat údaje o zaměstnanci. Všechny tyto případy obsahují funkci pro vyhledání údajů o zaměstnanci, která je vždy stejná. Můžeme ji tedy vyčlenit jako speciální případ, který ostatní případy využívají (obsahují v sobě).\n\n• <<EXTEND>>: Obrázek 2 vyjadřuje situaci, kdy jeden případ užití může rozšiřovat funkcionalitu jiných případů užití. Oproti relaci include, kde se vložený případ musí vždy použít, případ v relaci extend je nepovinný. Příklad uvedený na následujícím diagramu obsahuje případ VrátitKnihu. Součástí tohoto případu může být speciální varianta, kdy čtenář knihu např. ztratí a musí zaplatit pokutu. Tato situace nenastává vždy. V diagramu případů užití ji můžeme modelovat případem UložitPokutu, který rozšiřuje případ VrátitKnihu.\n\nDETAIL PŘÍPADU UŽITÍ\n\n• Pro konkretizaci (specifikaci) případu užití.\n \n• Pro jeho zobrazení neexistuje standard, většinou se používá tabulka.\n\n• Každá specifikace případu užití má své vstupní podmínky, tok událostí a výstupní podmínky.\n\n• Příklady:\n\n[[Soubor:31_18.JPG]]\n\n[[Soubor:31_19.JPG]]\n\n=====SEKVENČNÍ DIAGRAM (SEQUENCE DIAGRAM)=====\n\n• Reprezentuje časově orientovanou posloupnost předávání zpráv mezi objekty. \n\n• Bývá přehlednější než diagramy spolupráce a uživatelé jim lépe porozumí. \n\n• Každý objekt má svou časovou osu, která se zakresluje shora dolů a zprávy jsou na ní řazeny chronologicky. \n\n• Sekvenční diagramy umožňují definovat omezení (constraints) či význačný stav objektu.\n\n[[Soubor:31_12.JPG]]\n[[Soubor:31_13.JPG]]\n \n• Na posledním obrázku jsou definovány 2 kontrolní body A a B a podmínka říkající, že rozdíl mezi A a B musí být menší než 28 dní. (V tomto konkrétním případu toto omezení říká, že od doby příjmu platby manažerem až po odeslání objednaného zboží nesmí uběhnout více než 28 dní.) Význačné stavy jsou zachyceny textově u časové osy objektu po provedení žádané operace (nezaplaceno, zaplaceno).\n \n[[Soubor:31_14.JPG]]\n\n=====DIAGRAM SPOLUPRÁCE (COLLABORATION/COMMUNICATION DIAGRAM)=====\n\n• V diagramu spolupráce na obrázku 1 zobrazujeme každou roli zvlášt’. Elementy se označují identifikátorem s touto syntaxí a sémantikou: /NázevRole:NázevKlasifikátoru(třídy). Zaměstnanec a zaměstnavatel jsou instancemi třídy Osoba.\n\n• Diagram konkrétní spolupráce na obrázku 2 zobrazuje skutečné instance příslušných tříd a jejich vazby. Oproti předchozí variantě je k popisu přidán další (nepovinný) parametr – název objektu: názevObjektu/NázevRole:NázevKlasifikátoru(třídy)\n \n[[Soubor:31_09.JPG]]\n[[Soubor:31_10.JPG]]\n\n• Poslední diagram zobrazuje také posloupnosti zpráv zasílaných mezi objekty. Aktér (obdélník nalevo) zasílá zprávu 1 správci přednášek, který v reakci vytvoří instanci třídy Přednáška. U objektu „UML:Přednáška“ můžeme vidět stereotyp {nová}.\n \n[[Soubor:31_11.JPG]]\n\n=====DIAGRAM AKTIVIT (ACTIVITY DIAGRAM)=====\n\n• Jde o zvláštní případ stavového automatu, který je určen především na modelování manažerských procesů.\n\n• Obsahuje: počátek a konec, stavy aktivity a přechod mezi stavy.\n\n• Reprezentuje objektově orientované diagramy toků a lze jej připojit k libovolnému modelovanému elementu.\n \n[[Soubor:31_15.JPG]]\n\n=====DALŠÍ DIAGRAMY=====\n\n• (State Machine Diagram)\n\n• (Interaction Overview Diagram)\n\n• (Timing Diagram)\n\n----\n\n== ER DIAGRAM ==\n\n• Na rozdíl od jazyka UML nebyl vytvořen pro objektově orientovaný design, ale pro analýzu podnikových struktur. Přesto ho lze vytvářet v nástrojích pro jazyk UML (i když UML a ER model nejsou zcela konzistentní).\n\n• Je zaměřený na data systému.\n\n• Více v otázce 33.\n\n----\n\n== GANTŮV DIAGRAM ==\n\n• Využívá se při řízení projektů pro grafické znázornění naplánování posloupnosti činností v čase.\n\n• Na horizontální ose Ganttova diagramu je časové období trvání projektu, rozdělené do stejně dlouhých časových jednotek (dny, týdny...). Na vertikální ose jsou pak jednotlivé činnosti, na které se projekt člení, jeden řádek je vždy určen pro jednu činnost.\n\n• Na ploše diagramu jsou jednotlivé činnosti označeny obdélníky (pruhy), jejichž levá strana označuje plánovaný začátek činnosti a pravá strana plánované ukončení. Délka pruhu tak označuje předpokládanou délku trvání činnosti.\n\n• Lze jej vytvořit v programu Microsoft Excel a Microsoft Project.\n\n• V rozšířenější podobě mohou diagramy ukazovat také návaznosti činností pomocí lomených šipek nebo čar vedoucích od začátku nebo konce jedné činnosti k začátku nebo konci jiné činnosti (vztahy start-to-start, start-to-finish, finish-to-start nebo finish-to-finish). Během realizace projektu je často využíváno také svislé linky označující aktuální datum a zobrazování míry dokončení jednotlivých činností pomocí postupného vyplňování obdélníků v diagramu (zleva doprava).\n\n[[Soubor:31_20.jpg]]','utf-8'),(1594,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Diody==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n\n----\n\n==Tranzistory==\n===Bipolární tranzistory===\n[[Soubor:Bipolarnitranzistory.jpg]]\n\n\n\'\'\'Tranzistor má tři vývody:\'\'\'\n# \'\'\'Báze\'\'\' – ovládá tranzistor, na základě proudu v bázi je tranzistor sepnutý nebo vypnutý\n# \'\'\'Emitor\'\'\' \n# \'\'\'Kolektor\'\'\'\n\n# Na NPN musí být emitor záporný a na PNP musí být kladný, jinak to nebude fungovat\n# Na NPN musí být báze kladnější vůči emitoru (u PNP naopak)\n\n\n=====Parametry=====\n#\'\'\'Uce\'\'\' – napětí, které vydrží v zavřeném stavu (aby se nepoškodily P-N přechody)\n#\'\'\'Ube\'\'\' – bázové napětí v závěrném směru (kolem 5V) (závěrný směr je u NPN když je báze zápornější než emitor)\n#\'\'\'Ic – kolektorový proud\'\'\' (pokud se překročí, začne se zahřívat, může se poškodit)\n#\'\'\'Maximální bázový proud\'\'\'\n#\'\'\'Teplota přechodu\'\'\'\n#\'\'\'Proudový zesilovací činitel\'\'\' – kolikrát je větší kolektorový proud proti bázovému (kolektorový a bázový se násobí, takže pokud na bázi přivedeme méně proudu, úměrně se zmenší i proud na kolektoru\n#\'\'\'Saturační napětí kolektor-emitor (Uces)\'\'\' – jaké napětí nám zůtane na zavřeném tranzistoru (nežádoucí efekt, díky kterému se tranzistor zahřívá – vetšinou kolem 0.3V) – podobné ztrátě na diodě\n#\'\'\'Zbytkový proud\'\'\' – proud v závěrném směru – zanedbatelný\n#\'\'\'Ztrátový výkon\'\'\' – to co zůstane na tranzistoru a zahřívá ho\n## Pokud je tranzistor zavřený, je na něm velké napětí a zbytkový proud – minimální výkon\n## Pokud je tranzistor otevřený, tak je na něm malé napětí (závislé od saturačního napětí), ale velký proud\n\n\n#Na bázi se musí přivézt 0.6-0.7V aby se otevřel P-N přechod (to samé jako na diodě, je to omezeno materiálem)\n\n\n----\n\n=====Lineární mód=====\n# Kolektorový proud je závislý na bázovém (dáme míň proudu, míň se otevře, míň poteče)\n# Může být otevřený napůl – půl napětí x půl proudu zůstane na tranzistoru a moc ho zahřívá\n# Používá se například na zesilovače\n\n\n----\n\n=====Spínací mód=====\n# Může být jen otevřebý nebo zavřený (ne napůl)\n# Pokud chceme využívat vyhody spínacího i lineárního módu (bez mezistupňů se to nezahřívá a můžeme regulovat výstup), řeší se to pulsně-šířkovou modulací \n## Pokud máme na vstupu 10V a chceme 5V, tak bude půlku času zapnutý a půlku vypnutý (pulzy stejně dlouhé). Střední hodnota je tím pádem 5V, a tu druhou polovinu, která by v lineárním módu zůstala na tranzistoru neodebíráme, neplatíme, a nehřeje nám tranzistor\n# Ani ve spínacím módu se to nesepne hned a není to kolmé -> spínací ztráty\n# To, co zůstane na tranzistoru -> vodivé ztráty\n# Pokud se spíná moc rychle, generuje vysoké harmonické (mnohonásobek základní frekvence) – má tendenci se přenášet vzduchem, může rušit nebo ovlyvňovat činnost jiných obvodů\n# \'\'\'Parametr:\'\'\' čas, za který se dokáže tranzistor otevřít a zavřít (hodnoty nebývají stejné)\n\n\n----\n\n=====Komplementární tranzistory=====\n# tranzistory stejných parametrů, které jsou spolu zapojené, ale jeden je NPN a druhý PNP. Tyhle tranzisoty se párovaly – byli vybírané tranzistory se stejným zesilovacím činitelem (spolu se prodávali)\n\n\n----\n\n===Unipolární tranzistory===\n# Je jedno, kde se zapojí kolektor a emitor (nebo kde je + a -)\n# Společný název je FET – Field Emitted Transistor\n# \'\'\'Báze = gate\'\'\', hradlo\n# \'\'\'Emitor = source\'\'\', zdrojová elektroda\n# \'\'\'Kolektor = drain\'\'\', sběrná elektroda\n\n\n----\n\n=====JFET=====\n# Junction FET \n# P-N přechod jen mezi bází a emitorem\n[[Soubor:Jfet.gif]]\n\n----\n\n=====MOSFET=====\n# Metal Oxide Semiconductor\n[[Soubor:Mosfet.jpg]]\n# Ve skutečnosti vývody bývají jen tři, Body je obvykle spojené se source\n# Nemá P-N přechod – hradlo je pomocí oxidu izolované od zbytku\n# Nazývá se i polem řízené, protože je otevírá elektricé pole mezi hradlem a emitorem\n# Čím je teplejší, tím má větší odpor – bezproblémové paralelní řazení\n# Proud do báze se neuvažuje – téměř žádný (MOSFETy se budí jen napětím) – potřebujeme nabít vstupní kapacitu tranzistoru, ale poté nepotřebujeme téměř žádný proud\n# MOSFETy se používají hlavně ve spínacích aplikacích – ovšem aby začal něco dělat,musí se na něj přivést větší napětínež na bipoláry -> 0.8-4V\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi kolektorem a emitorem\n# Maximální proud mezi kolektorem a emitorem\n# Maximální napětí báze vůči emitoru – max 20V (někdy i 30, ale zřídka) – velice citlivé na statickou elektřinu – pokud se napětí překročí, oxid se prorazí a vodivě se to spojí\n# Odpor v sepnutém stavu (když je vypnutý, je nekonečný)\n# \'\'\'Strmost\'\'\' – podobné jako proudový zesilovací činitel – závislost kolektorového proudu na napětí hradla\n\n\n\'\'\'P-kanál\'\'\' – budí se záporným napětím hradla vůči emitoru (analog PNP). tranzistory s P-kanálem mají větší přechodový odpor.\n\n\'\'\'N-kanál\'\'\' – budí se kladným napětím hradla vůči emitoru (analog NPN)\n[[Soubor:Znacky.gif]]\n\n\n----\n\n===Tyristory===\n\n\n[[Soubor:Thyristor.gif]]\n# Spínací prvek – nepracuje nikdy v lineárním režimu\n# Po sepnutí ostává tyristor trvale sepnutí, i kduž už nemá buzení do Gate, a vypne se jen pokud anodový proud klesne pod nějakou úroveň (přídržný proud tyristoru) \n# V obvodech se střídavým proudem se tyristor přirozene vypne při přechodu proudu nulou\n# Bipolární prvek, proud teče jen jedním směrem\n# Existuje jestě součástka triak, která je použitelná i ve střídavých obvodech (proud může téct oběmi směry)\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi anodou a katodou\n# Maximální anodový proud\n# Teplota přechodu\n# Gateový proud, kterým se zajistí spolehlivé sepnutí\n# Spínací časy\n\n\n----\n\n==NAND a NOR v technologii CMOS==\n\'\'\'Parametry:\'\'\'\n# Rychlost hradla (za jak dlouho od vstupu dostanu výstup)\n\n\n# Hlavní spotřeba energie je při přepínání výstupu, proto se vývoj ubírá k co nejnižšímu napájecímu napětí (procesory u PC pracují s napětím 1-1.5V)\n\n===NAND===\n[[Soubor:Cmos_nand.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# CMOS může fungovat až na 15V – logická 0 je pořád 0-1V, logická 1 je napájecí napětí-(napájecí napětí-1V)\n# T1 a T2 tvoří logická 1 (kterýkoli z nich, stačí 1)\n# T3 a T4 jsu zapojeny sériově, tvoří logickou 0, ale musí být sepnuty oba (protože jsou zapojeny sériově, tak pokud je jeden vypnutý, obvod je už rozpojený)\n\n\n----\n\n===NOR===\n[[Soubor:Cmos_nor.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# T1 a T2 jsou zde zapojeny sériově, tvoří logickou 1, musí být sepnuty oba\n# T3 nebo T4 vytvoí logickou 0 pokud je aspoň jeden z nich sepnutý','utf-8'),(1595,'==P-N přechod==\n# Je to oblast na rozhraní příměsového polovodiče typu P a polovodiče typu N\n# Chová se jako hradlo – propouští elektrický proud pouze jedním směrem\n# \'\'\'N-polovodiče\'\'\' – majoritními nositeli náboje jsou elektrony (e-)\n# \'\'\'P-polovodiče\'\'\' – majoritními nositeli náboje jsou tzv. díry (h+)\n# \'\'\'Příměsové polovodiče\'\'\' – volné elektrony nebo kladné díry lze dstat do polovodiče také pomocí příměsí. I malé množství (tisíciny procenta) může vést k dostatečnému zvýšení vodivosti -> nevlastní vodivost\n## \'\'\'polovodič typu N\'\'\' – do křemíku se čtyřmi valenčními elektrony se přidá prvek s pěti valenčními elektrony (fosfor, arsen, antimon)\n## \'\'\'polovodič typu P\'\'\' – do křemíku se přidá prveks pouze třemi valenčními elektrony (bór, hliník, gálium, indium)\n\n----\n\n==Diody==\n# Součástka, která propouští proud jen jedním směrem\n=====Základní parametry=====\n# \'\'\'Proud v prospustném směru\'\'\' – kolik ampérů může pěs diodu procházet bez jejícho poškození\n# \'\'\'Závěrné napětí\'\'\' – napětí (v závěrném směru), při kterém se prorazí P-N přechod\n## zajímá nás špičkové napětí, ne efektivní. Špičkové je efektivní x odmocnina ze dvou.\n## když se přechod prorazí, dioda je zničená\n# \'\'\'Závěrný proud\'\'\' – dioda vede i v opačném směru, ale velice málo (je to parazitný jev – nechceme ho)\n# \'\'\'Napětí v propustném směru\'\'\' – úbytek na diodě – vede k zahřívání diody – je to výkonová ztráta, úbytek na diodě x procházející proud. Obvykle se jedná o 0.6-0.7 V\n# \'\'\'Teplota\'\'\' - Čím víc vydrží dioda v závěrném směru, tím je vyšší úbytek – proto se nevyrábí jen ty co hodně vydrží, protože když se žene stejný proud cez dvě diody s různým závěrným napětím, tak ta s větším se bude víc zahřívat\n## Maximální teplota P-N přechodu je limitní veličina, která se nesmí překročit, jinak se to uvaří a máme po diodě\n## čím je dioda teplejší, tím se zhoršuje závěrný proud (u normální teploty propouští např. 10 mikroampérů, u 100°C třeba 100 mikroampérů), ale snižuje se napětí v propustném směru (se zvyšující se teplotou se snižuje úbytek)\n### Většinou jsme rádi, že se nám snižuje úbytek, ale vždy se najde případ, kdy je to spíše nežádoucí\n### Omezuje paralelní použití diod – zádné dvě diody nejsou stejné, nejspíše se každá bude zahřívat jinak (buď mají různé úbytky, nebo na jednu třeba svítí lampa a na druhou ne). Máme kabel, kde nám teče proud o 10A, ale máme jen 5A diody. Proto je zapojíme paralelně a v ideálním případě cez každou poteče 5A. Ale tím jak se různě zahřívají, tak přes tu co se zahřívá víc, půjde 5,5A například a na druhou zbyde 4,5A. Ta přes kterou poteče větší proud se ještě víc zahřeje a propustí ještě víc proudu – dokud se dioda nezničí. Potom všechen proud prochází přes tu druhou diodu a ta se zničí taky.\n\n\n----\n\n=====Ideální dioda=====\n[[Soubor:Idealni_dioda.gif]]\n\n----\n\n=====Skutečná dioda=====\n[[Soubor:Graf_dioda.png]]\n\n\n----\n\n===Druhy diod===\n=====Běžné usměrňovací diody=====\n[[Soubor:Dioda_zn.gif]]\n# Vytváří ze střídavého proudu jednosměrný\n# Zápornou půlvlnu prostě nepropustí\n[[Soubor:Jednosmerny.png]]\n# To se nám ovšem nelíbí a chceme i druhou půlku. K tomu se využívá Graetzovo zapojení\n[[Soubor:Graetzovo_zapojeni.png]]\n# Když je + nahoře, tak přes 3, zátěž a 4\n# Když je + dole, tak přes 1, zátěž a 2\n\n----\n\n=====Zenerovy diody=====\n[[Soubor:Zenerova_zn.gif]]\n# K její činnosti se využívá hlavně závěrný směr, ne propustný\n[[Soubor:Zenerova_dioda.gif]]\n# Používá se na stabilizaci napětí (znějakého důvodu je divně rozházené a chceme stabilních 5V)\n# Ochrana před přepětím (transil-diody)\n# Maximální výkon který přes ni může procházet, bez toho aby se uvařila – čím větší napětí, tím menší proud (výkon = proud x napětí)\n# Diferenciální odpor – červená čára v grafu by v ideálním případě šla kolmo dolů. Ale nejde, a ten rozdíl (kde by na ose x byla kdyby to šlo kolmo dolů, a kde ve skutečnosti je v rámci hodnoty nějakého proudu) reprezenuje difereciální odpor\n\n\n----\n\n=====LED (Light Emitting Diode)=====\n[[Soubor:Led.gif]]\n# Různé barvy\n# Úbytek v propustném směru větší než u normálních diod (červená má nejmenší, cca 1.6V, modrá největší – víc než 3V)\n[[Soubor:Led_diody.gif]]\n# Svítivost diody závisí od proudu, který jí prochází (čím větší proud, tím více svítí)\n# Velmi malé závěrné napětí (kolem 5V)\n\n\n----\n\n=====Schottkyho diody=====\n[[Soubor:Schottky.png]]\n# P-N přechod tvoří polovodič a kov (nejčastěji křemík a hliník)\n# \'\'\'Výhoda\'\'\' – malý úbytek v propustném směru\n# \'\'\'Nevýhoda\'\'\' – existují jen do poměrně malých závěrných napětí – běžně tak do 100V, max. 200V (nemůžeme použít na napětí ze zásuvky)\n## velice citlivé na překmity závěrného napětí (normální dioda malé překročení na chvilku snese, ale schottkyho se hned zničí)\n# Použití ve vysokofrekvenčních zdrojích kvůli krátké době zotavení\n# \'\'\'Doba zotavení\'\'\' – když se dostane do závěrného směru, měla by přestat hned vést proud, ale chvilku jí trvá, než si to uvědomí.\n## schottkyho diody jsou nepřekonané v době zotavení\n# Větší závěrný proud\n[[Soubor:Vysoke_frekvencie.png]]\n\n\n----\n\n=====Rychlé, hyperrychlé atd. diody=====\n# Zajímá nás doba zotavení, o kus větší než u schottkyho diod, potřebujeme je tam, kde je vysoká frekvence a větší závěrné napětí\n\n\n----\n\n=====Varikap=====\n[[Soubor:Varikap.png]]\n# P-N přechod polarizovaný v závěrném směru představuje vlastně kondenzátor\n# Využívá se jeho kapacita, která je závislá na přivedeném napětí (čím vyšší napětí, tím nižší kapacita)\n# V současných technologiích se moc nepoužívá, jinak na přelaďování rezonančních obvodů (cívka + kondenzátor – vstupy rádiových, televizních a satelitních přijímačů)\n[[Soubor:varikap2.png]]\n\n\n----\n\n==Tranzistory==\n===Bipolární tranzistory===\n[[Soubor:Bipolarnitranzistory.jpg]]\n\n\n\'\'\'Tranzistor má tři vývody:\'\'\'\n# \'\'\'Báze\'\'\' – ovládá tranzistor, na základě proudu v bázi je tranzistor sepnutý nebo vypnutý\n# \'\'\'Emitor\'\'\' \n# \'\'\'Kolektor\'\'\'\n\n# Na NPN musí být emitor záporný a na PNP musí být kladný, jinak to nebude fungovat\n# Na NPN musí být báze kladnější vůči emitoru (u PNP naopak)\n\n\n=====Parametry=====\n#\'\'\'Uce\'\'\' – napětí, které vydrží v zavřeném stavu (aby se nepoškodily P-N přechody)\n#\'\'\'Ube\'\'\' – bázové napětí v závěrném směru (kolem 5V) (závěrný směr je u NPN když je báze zápornější než emitor)\n#\'\'\'Ic – kolektorový proud\'\'\' (pokud se překročí, začne se zahřívat, může se poškodit)\n#\'\'\'Maximální bázový proud\'\'\'\n#\'\'\'Teplota přechodu\'\'\'\n#\'\'\'Proudový zesilovací činitel\'\'\' – kolikrát je větší kolektorový proud proti bázovému (kolektorový a bázový se násobí, takže pokud na bázi přivedeme méně proudu, úměrně se zmenší i proud na kolektoru\n#\'\'\'Saturační napětí kolektor-emitor (Uces)\'\'\' – jaké napětí nám zůtane na zavřeném tranzistoru (nežádoucí efekt, díky kterému se tranzistor zahřívá – vetšinou kolem 0.3V) – podobné ztrátě na diodě\n#\'\'\'Zbytkový proud\'\'\' – proud v závěrném směru – zanedbatelný\n#\'\'\'Ztrátový výkon\'\'\' – to co zůstane na tranzistoru a zahřívá ho\n## Pokud je tranzistor zavřený, je na něm velké napětí a zbytkový proud – minimální výkon\n## Pokud je tranzistor otevřený, tak je na něm malé napětí (závislé od saturačního napětí), ale velký proud\n\n\n#Na bázi se musí přivézt 0.6-0.7V aby se otevřel P-N přechod (to samé jako na diodě, je to omezeno materiálem)\n\n\n----\n\n=====Lineární mód=====\n# Kolektorový proud je závislý na bázovém (dáme míň proudu, míň se otevře, míň poteče)\n# Může být otevřený napůl – půl napětí x půl proudu zůstane na tranzistoru a moc ho zahřívá\n# Používá se například na zesilovače\n\n\n----\n\n=====Spínací mód=====\n# Může být jen otevřebý nebo zavřený (ne napůl)\n# Pokud chceme využívat vyhody spínacího i lineárního módu (bez mezistupňů se to nezahřívá a můžeme regulovat výstup), řeší se to pulsně-šířkovou modulací \n## Pokud máme na vstupu 10V a chceme 5V, tak bude půlku času zapnutý a půlku vypnutý (pulzy stejně dlouhé). Střední hodnota je tím pádem 5V, a tu druhou polovinu, která by v lineárním módu zůstala na tranzistoru neodebíráme, neplatíme, a nehřeje nám tranzistor\n# Ani ve spínacím módu se to nesepne hned a není to kolmé -> spínací ztráty\n# To, co zůstane na tranzistoru -> vodivé ztráty\n# Pokud se spíná moc rychle, generuje vysoké harmonické (mnohonásobek základní frekvence) – má tendenci se přenášet vzduchem, může rušit nebo ovlyvňovat činnost jiných obvodů\n# \'\'\'Parametr:\'\'\' čas, za který se dokáže tranzistor otevřít a zavřít (hodnoty nebývají stejné)\n\n\n----\n\n=====Komplementární tranzistory=====\n# tranzistory stejných parametrů, které jsou spolu zapojené, ale jeden je NPN a druhý PNP. Tyhle tranzisoty se párovaly – byli vybírané tranzistory se stejným zesilovacím činitelem (spolu se prodávali). Ze dvou komplementárních tranzistorů MOSFET je sestaven invertor.\n\n\n----\n\n===Unipolární tranzistory===\n# Je jedno, kde se zapojí kolektor a emitor (nebo kde je + a -)\n# Společný název je FET – Field Emitted Transistor\n# \'\'\'Báze = gate\'\'\', hradlo\n# \'\'\'Emitor = source\'\'\', zdrojová elektroda\n# \'\'\'Kolektor = drain\'\'\', sběrná elektroda\n\n\n----\n\n=====JFET=====\n# Junction FET \n# P-N přechod jen mezi bází a emitorem\n[[Soubor:Jfet.gif]]\n\n----\n\n=====MOSFET=====\n# Metal Oxide Semiconductor\n[[Soubor:Mosfet.jpg]]\n# Ve skutečnosti vývody bývají jen tři, Body je obvykle spojené se source\n# Nemá P-N přechod – hradlo je pomocí oxidu izolované od zbytku\n# Nazývá se i polem řízené, protože je otevírá elektricé pole mezi hradlem a emitorem\n# Čím je teplejší, tím má větší odpor – bezproblémové paralelní řazení\n# Proud do báze se neuvažuje – téměř žádný (MOSFETy se budí jen napětím) – potřebujeme nabít vstupní kapacitu tranzistoru, ale poté nepotřebujeme téměř žádný proud\n# MOSFETy se používají hlavně ve spínacích aplikacích – ovšem aby začal něco dělat,musí se na něj přivést větší napětínež na bipoláry -> 0.8-4V\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi kolektorem a emitorem\n# Maximální proud mezi kolektorem a emitorem\n# Maximální napětí báze vůči emitoru – max 20V (někdy i 30, ale zřídka) – velice citlivé na statickou elektřinu – pokud se napětí překročí, oxid se prorazí a vodivě se to spojí\n# Odpor v sepnutém stavu (když je vypnutý, je nekonečný)\n# \'\'\'Strmost\'\'\' – podobné jako proudový zesilovací činitel – závislost kolektorového proudu na napětí hradla\n\n\n\'\'\'P-kanál\'\'\' – budí se záporným napětím hradla vůči emitoru (analog PNP). tranzistory s P-kanálem mají větší přechodový odpor.\n\n\'\'\'N-kanál\'\'\' – budí se kladným napětím hradla vůči emitoru (analog NPN)\n[[Soubor:Znacky.gif]]\n\n\n----\n\n===Tyristory===\n\n\n[[Soubor:Thyristor.gif]]\n# Spínací prvek – nepracuje nikdy v lineárním režimu\n# Po sepnutí ostává tyristor trvale sepnutí, i kduž už nemá buzení do Gate, a vypne se jen pokud anodový proud klesne pod nějakou úroveň (přídržný proud tyristoru) \n# V obvodech se střídavým proudem se tyristor přirozene vypne při přechodu proudu nulou\n# Bipolární prvek, proud teče jen jedním směrem\n# Existuje jestě součástka triak, která je použitelná i ve střídavých obvodech (proud může téct oběmi směry)\n\n\n\'\'\'Parametry:\'\'\'\n# Maximální napětí mezi anodou a katodou\n# Maximální anodový proud\n# Teplota přechodu\n# Gateový proud, kterým se zajistí spolehlivé sepnutí\n# Spínací časy\n\n\n----\n\n==NAND a NOR v technologii CMOS==\n\'\'\'Parametry:\'\'\'\n# Rychlost hradla (za jak dlouho od vstupu dostanu výstup)\n\n\n# Hlavní spotřeba energie je při přepínání výstupu, proto se vývoj ubírá k co nejnižšímu napájecímu napětí (procesory u PC pracují s napětím 1-1.5V)\n\n===NAND===\n[[Soubor:Cmos_nand.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# CMOS může fungovat až na 15V – logická 0 je pořád 0-1V, logická 1 je napájecí napětí-(napájecí napětí-1V)\n# T1 a T2 tvoří logická 1 (kterýkoli z nich, stačí 1)\n# T3 a T4 jsu zapojeny sériově, tvoří logickou 0, ale musí být sepnuty oba (protože jsou zapojeny sériově, tak pokud je jeden vypnutý, obvod je už rozpojený)\n\n\n----\n\n===NOR===\n[[Soubor:Cmos_nor.png]]\n# Tranzisory T1 a T2 jsou P-kanál – otevřené, pokud je vstup 0 (0-1V)\n# Tranzistory T3 a T4 jsou N-kanál – otevřené, pokud je vstup 1 (4-5V)\n# T1 a T2 jsou zde zapojeny sériově, tvoří logickou 1, musí být sepnuty oba\n# T3 nebo T4 vytvoí logickou 0 pokud je aspoň jeden z nich sepnutý','utf-8'),(1596,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. Výstupní hodnoty jsou periodické signály. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n----\n\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n----\n\n\n==Stavové automaty==\nStavové automaty jsou sekvenční subsystémy představující zobecnění čítačů. Mohou být synchronní i asynchronní. Čítače můžeme pokládat za jednoduchý druh (zvláštní případ) stavových automatů.\n\nKonečný automat je šestice KA=(X,Y,Q,q0,P,V), kde:\n# X - vstupní abeceda (množina hodnot vstupních proměnných)\n# Y - výstupní abeceda (množina hodnot výstupních proměnných)\n# Q - vnitřní abeceda (množina hodnot vektoru vnitřního stavu - seznam stavů?)\n# q0 - patří do Q, počáteční stav, ze kterého se vždy startuje\n# P - přechodová funkce\n# V - výstupní funkce - Mealy, Moore, nebo jejich kombinace\n\nStavové automaty představují přechod od běžné logiky k mikrokontrolérům. Sekvenční způsob práce mikrokontrolérů (postupné vykonávání instrukcí) dovoluje mikrokontroléry použít v mnoha aplikacích pro řešení nejrůznějších úloh, a propůjčuje jim tedy velkou univerzálnost. Na druhé straně je však příčinou nižší rychlosti reakce, protože pro vytvoření odpovídajících výstupních signálů musí u typického mikrokontroléru proběhnout několik (často velmi mnoho) instrukčních cyklů. Pokud algoritmus vytvoření výstupních signálů není příliš složitý, je obvykle možno stejnou úlohu řešit stavovým automatem, který má strukturu navrženou speciálně pro řešený problém. Tato struktura pak bývá výrazně jednodušší a rychlejší.\n\nU čítačů jsou přechody převážně mezi sousedními stavy (inkrementace, dekrementace) a mají omezený počet vstupů, které ovlivňují chování čítače jednoduchým způsobem (up/down, reset...).\n\nU stavových automatů však mohou být přechody uspořádány zcela obecně, o \"sousedných stavech\" spravidla nemá smysl mluvit. Vstupů bývá víc než u čítačů, ty ovlivňují přechody mezi stavy obecným způsobem, které často nejde obecně popsat tak, aby to platilo pro celý automat, musí to být pro každý stav zvlášť.\n\nKonečné automaty mohou být buď plně definované, nebo neúplně definované. Nedefinované výstupy není třeba uvádět.\n\n======Moorův automat======\nVýstup je funkcí pouze současného stavu.\n[[Soubor:Moore.png]]\n\n======Mealyho automat======\nVýstup je funkcí současného stavu a vstupu.\n[[Soubor:Mealy.png]]\n\n======Mealyho/Moorův automat======\nSoučasné využití vlastností výstupní funkce Mealyho i Moorova automatu.\n[[Soubor:Mealymoore.png]]','utf-8'),(1597,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. Výstupní hodnoty jsou periodické signály. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n----\n\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n----\n\n\n==Stavové automaty==\nStavové automaty jsou sekvenční subsystémy představující zobecnění čítačů. Mohou být synchronní i asynchronní. Čítače můžeme pokládat za jednoduchý druh (zvláštní případ) stavových automatů.\n\nKonečný automat je šestice KA=(X,Y,Q,q0,P,V), kde:\n# X - vstupní abeceda (množina hodnot vstupních proměnných)\n# Y - výstupní abeceda (množina hodnot výstupních proměnných)\n# Q - vnitřní abeceda (množina hodnot vektoru vnitřního stavu - seznam stavů?)\n# q0 - patří do Q, počáteční stav, ze kterého se vždy startuje\n# P - přechodová funkce\n# V - výstupní funkce - Mealy, Moore, nebo jejich kombinace\n\nStavové automaty představují přechod od běžné logiky k mikrokontrolérům. Sekvenční způsob práce mikrokontrolérů (postupné vykonávání instrukcí) dovoluje mikrokontroléry použít v mnoha aplikacích pro řešení nejrůznějších úloh, a propůjčuje jim tedy velkou univerzálnost. Na druhé straně je však příčinou nižší rychlosti reakce, protože pro vytvoření odpovídajících výstupních signálů musí u typického mikrokontroléru proběhnout několik (často velmi mnoho) instrukčních cyklů. Pokud algoritmus vytvoření výstupních signálů není příliš složitý, je obvykle možno stejnou úlohu řešit stavovým automatem, který má strukturu navrženou speciálně pro řešený problém. Tato struktura pak bývá výrazně jednodušší a rychlejší.\n\nU čítačů jsou přechody převážně mezi sousedními stavy (inkrementace, dekrementace) a mají omezený počet vstupů, které ovlivňují chování čítače jednoduchým způsobem (up/down, reset...).\n\nU stavových automatů však mohou být přechody uspořádány zcela obecně, o \"sousedných stavech\" spravidla nemá smysl mluvit. Vstupů bývá víc než u čítačů, ty ovlivňují přechody mezi stavy obecným způsobem, které často nejde obecně popsat tak, aby to platilo pro celý automat, musí to být pro každý stav zvlášť.\n\nKonečné automaty mohou být buď plně definované, nebo neúplně definované. Nedefinované výstupy není třeba uvádět.\n\n======Moorův automat======\nVýstup je funkcí pouze současného stavu.\n[[Soubor:Moore.png]]\n\n======Mealyho automat======\nVýstup je funkcí současného stavu a vstupu.\n[[Soubor:Mealy.png]]\n\n======Mealyho/Moorův automat======\nSoučasné využití vlastností výstupní funkce Mealyho i Moorova automatu.\n[[Soubor:Mealymoore.png]]','utf-8'),(1598,'===Sekvenční logické obvody===\nRozdíl mezi sekvenčními a kombinačními obvody je v tom, že výstupy kombinačních logických obvodů reagují okamžitě (v rámci možností elektronických součástek) na jakoukoliv změnu na vstupech obvodu podle předepsaného logického schématu, které lze definovat logickou funkcí. U kombinačních logických obvodů tedy nedochází k žádnému paměťovému efektu, pomineme-li krátké zpoždění vznikající při průchodu signálu elektronickými obvody.\n\nLogické obvody, které obsahují paměťové prvky, nazýváme logickými obvody sekvenčními, pro jednoznačné určení výstupních signálů je totiž potřeba kromě okamžitých vstupních stavů znát též sekvenci jejich předchozích změn.\n\nHodnoty výstupních proměnných tedy u sekvenčních logických obvodů nezávisí pouze na hodnotách vstupních proměnných, ale i na vnitřním stavu sekvenčního obvodu. Aktuální vnitřní stav je dán hodnotami vnitřních proměnných, které jsou uloženy v paměťových členech. Tyto paměťové prvky jsou obvykle realizovány klopnými obvody.\n\nSekvenční logický obvod se proto na rozdíl od kombinačního logického obvodu skládá ze dvou částí – kombinační a paměťové. Obě tyto části je možné realizovat logickými členy (hradly). Zatímco kombinační část sekvenčního obvodu je možné si představit jako standardní kombinační logický obvod, který lze reprezentovat logickou funkcí, paměťová část je tvořena kombinačním obvodem, ve kterém je zavedena zpětná vazba. Kombinační obvody se zpětnou vazbou nazýváme (bistabilní) klopné obvody. Díky zpětné vazbě, která přivádí signál z výstupu obvodu zpět na jeho vstup, jsou schopny si klopné obvody uchovat (zapamatovat) předchozí stav i ve chvíli, kdy již vstupní informace není k dispozici.\n\nSekvenční logické obvody dělíme na asynchronní a synchronní.\n\n\n=====Asynchronní sekvenční obvody=====\nU asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (samozřejmě opět v rámci možností elektronických součástek). Asynchronní sekvenční obvod tedy reaguje ihned na změnu vstupních signálů.\n\n\'\'\'Výhody:\'\'\' rychlé, není třeba generátor a rozvod hodinového signálu, nižší příkon, lepší elektromagnetická kompatibilita.\n\n\'\'\'Nevýhody:\'\'\' velmi složitý návrh, u fundamentálního módu je zpoždění vodičů nedeterministické (mění se s teplotou, elektrickými a výrobními parametry obvodu), u pulzního módu není paměť (klopné obvody) globálně synchronizována hodinovými signály.\n\n\n======Fundamentální mód činnosti======\nVstupní proměnné musí být stabilní po celou dobu, než obvod přejde do nového stabilního stavu. Navíc platí, že v jednom okamžiku se může měnit hodnota vždy jen na jednom vstupu. Pamět stavu je realizována pomocí zpoždění.\n\n\'\'\'Souběh:\'\'\' V reálném obvodu nelze zajistit změnu více proměnných ve stejném okamžiku. Stavové proměnné se mohou, díky obecně různým zpožděním zpětných vazeb, měnit o nedefinovanou dobu dříve než jiné a mají pak hodnoty z množiny stavů daných podkrychlí přechodu - tzv. nestabilní stavy. Pokud se při přechodu mezi stabilními stavy mění pouze jedna proměnná, souběh nemůže nastat.\n\n[[Soubor:Krychle.png]]\n\n\n======Pulsní mód činnosti======\nVstupní proměnné jsou aktivní jen po určitou dobu (pulsy). Vždy jen jeden pulz může být aplikován na vstupu v daný okamžik. Paměťové prvky jsou realizovány z klopných obvodů a jsou řízeny pouze vstupními pulzy.\n\n=====Synchronní sekvenční obvody=====\nSynchronní sekvenční obvody naproti tomu obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock). Stav synchronního sekvenčního obvodu se nemění okamžitě se změnou vstupní proměnné, ale až při definované změně hodinového signálu. Synchronní sekvenční obvody lze dále rozdělit na obvody řízené úrovní (úrovňové) a obvody řízené hranou (hranové). V prvním případě může synchronní sekvenční obvod měnit svůj stav po celou dobu, kdy je hodinový signál v definované úrovni. V druhém případě se může stav synchronního sekvenčního obvodu měnit pouze s náběžnou nebo spádovou hranou hodinového signálu.\n\nNaprostá většina z používaných sekvenčních obvodů (včetně procesorů, mikroprocesorů, mikrokontrolérů atd.) jsou sekvenční obvody synchronní, které jsou řízeny hranou hodinového signálu. Výhodou synchronních sekvenčních obvodů je zejména jednodušší návrh. Je-li totiž splněna podmínka, že všechny interní obvody dosáhnou ustáleného stavu v čase kratším než je délka jednoho hodinového cyklu (tj. do okamžiku další hrany hodinového signálu), je (obvykle) zaručeno, že nebude v synchronním sekvenčním obvodu docházet k nepředvídatelným stavům (hazardům). Synchronní sekvenční obvody mají samozřejmě i své nevýhody. Protože musí být hodinový signál distribuován ke všem klopným obvodům a vzhledem k tomu, že má hodinový signál obvykle relativně vysoký kmitočet, vyžaduje tato distribuce nezanedbatelný příkon, z čehož může plynout i zahřívání obvodu.\n\nDalším problémem může být maximální velikost kmitočtu hodinového signálu, která je dána nejpomalejší částí sekvenčního obvodu. Jak již bylo řečeno výše, veškeré operace v synchronním sekvenčním obvodu musí proběhnout v čase kratším než je délka hodinového cyklu. Z toho plyne, že složitější funkční celky sekvenčního obvodu mohou limitovat kmitočet hodinového signálu celého synchronního obvodu. Tento problém se např. u mikroprocesorových systémů často řeší rozdělením složitějších funkčních celků na jednodušší, ve kterých se pak signál zpracovává paralelně. Problémem synchronních sekvenčních obvodů může být rovněž větší vyzařované rušení. Protože se v synchronním obvodu mění stavy většiny vnitřních obvodů současně při hranách hodinového signálu, spektrum rušení vykazuje výraznější spektrální čáry na hodinovém kmitočtu a jeho harmonických.\n\n----\n\n\n==Klopné obvody==\nKlopný obvod je elektronický obvod, který může nabývat právě dva odlišné napěťové stavy, přičemž ke změně z jednoho stavu do druhého dochází skokově. Tyto obvody se skládají z několika hradel nebo jiných aktivních prvků a lze je použít např. jako paměťové prvky, impulzní generátory nebo časovače.\n\n===Astabilní klopný obvod===\nAstabilní klopné obvody, označované také jako AKO, nemají žádný stabilní stav, což znamená, že tyto obvody neustále oscilují (překlápějí se) mezi jedním a druhým stavem podle nastavené časové konstanty. Výstupní hodnoty jsou periodické signály. AKO jsou proto používány jako impulzní generátory, tónové generátory, blikače.\n\n===Monostabilní klopný obvod===\nMonostabilní klopný obvod, označovaný jako MKO, má jeden stabilní stav, ze kterého je možné jej přepnout do stavu nestabilního. Obvod se sám po určité době přepne zpět do stabilního stavu. Tento typ obvodu je možné použít například jako zpožďovací prvek nebo časový spínač.\n\n===Schmittův klopný obvod===\nSchmittův klopný obvod slouží k úpravě tvaru impulzů. Jeho základní vlastností je hystereze. To znamená, že jeho výstup je závislý nejen na hodnotě vstupu, ale i na jeho původním stavu. Hystereze, která je jindy nežádoucí, má zde své opodstatnění v tom, že zabraňuje vzniku zákmitů výstupního signálu v okolí střední úrovně spínání. Citlivost obvodu se nastavuje šíří-velikostí hystereze.\n\nJinými slovy to znamená, že pokud je u normálního klopného obvodu nastaveno napětí, kdy se přepne na jedničku 4V, tak u 4V se na jedna přepne, ale vzhledem k tomu, že napětí nebývá dokonale stabilní, tak když překmitne na 3,8V, vrátí se zpět do nuly. A takhle pořád překmitává mezi těmito dvěmi stavy.\n\nHystereze tomuto zabraňuje tak, že pokud se již jednou stav sepnul, tak pro přechod do druhého stavu se změní hranice. Tudíž to není již nad 4V jednička, a pod 4V nula. U hystereze tu funguje tak, že když se jednou dosáhne těch 4V a obvod se sepne do jedničky, pro pěchod do nuly to musí být 2V. Rozdíl je tím pádem dostatečně velký, aby se obvod nespínal u těchto překmitů.\n\n[[Soubor:Smitt_hysteresis_graph.png]]\n\nNa obrázku je to první aktuální impulzy, to růžové normální klopní obvod bez hystereze, zelené je s hysterezí. Všimněte si, jak zmizelo zbytečné přepínání díky překmitům.\n\n----\n\n===Bistabilní klopný obvod===\nBistabilní klopné obvody, označované jako BKO, mají oba dva stabilní stavy. Mezi těmito stavy lze libovolně přepínat, pomocí signálů přivedených na vstupy. Tyto obvody se proto používají jako paměťové prvky. Všechny jsou to prakticky jednobitové paměti, jen mají různá provedení. Nejznámější jsou: R-S, J-K, D a T.\n\n====R-S klopný obvod====\nKlopný obvod R-S, ať již ve verzi s hradly NOR nebo hradly NAND, představuje nejjednodušší zapojení vykazující paměťový efekt. Jedná se tedy o nejjednodušší sekvenční logický obvod. R-S klopný obvod je základem složitějších klopných obvodů, které odstraňují problémy se zakázaným stavem.\n\nR-S klopný obvod má vždy dva vstupy, označované jako R (reset) a S (set). Logicky to chceme buď nastavit, nebo vynulovat, ale nikdy ne obě najednou (zakázaný stav). Když jsou R i S v nule, pamatuje si to prostě předchozí stav. Výstupy jsou Q a Q\', přičemž Q je hodnota kterou si to má pamatovat a Q\' je invertovaná hodnota Q.\n\n[[Soubor:RStabulka.png]]\n\n=====Asynchronní R-S=====\nR-S a R-S NON klopné obvody popsané níže jsou příklady nejjednodušších asynchronních sekvenčních obvodů. U asynchronních sekvenčních obvodů má změna vstupní proměnné za následek okamžitou změnu stavu sekvenčního obvodu (neuvažujeme-li krátký přechodový děj). Asynchronní sekvenční obvody tedy reagují ihned na změnu vstupních signálů.\n\n======R-S klopný obvod NOR======\n[[Soubor:RSklopak.png]]\n\n======R-S klopný obvod NAND======\n[[Soubor:RSNAND.png]]\n\n======R-S NON klopný obvod NAND======\nklopný obvod lze udělat i jen ze dvou NANDů, rozdíl je v tom, že vstupy jsou aktivní v nule (úrovni L).\n\n[[Soubor:RSnonNAND.png]]\n\nTím pádem i tabulka stavů bude jiná, invertovaná v porovnání s předchozí.\n[[Soubor:RSnonTab.png]]\n\n=====Synchronní R-S=====\nSynchronní sekvenční obvody oproti asynchronním obsahují navíc řídící synchronizační signál (tzv. hodinový signál, angl. clock, u synchronních sekvenčních obvodů řízených hranou, nebo signál povolení/uvolnění, angl. enable, u synchronních sekvenčních obvodů řízených úrovní). Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni. Stav synchronních sekvenčních obvodů řízených hranou se pak může měnit pouze s náběžnou nebo spádovou hranou hodinového signálu (tj. v okamžiku, kdy se mění úroveň hodinového signálu z L do H nebo z H do L).\n\n======R-S klopný obvod řízený úrovní======\nObvody řízené úrovní se nazývají také \'\'latch\'\'. Synchronní sekvenční obvody řízené úrovní mohou měnit svůj stav pouze v době, kdy je signál uvolnění E v definované úrovni.\n\nKlopný R-S obvod řízený úrovní získáme poměrně snadno - potřebujeme tam jen přivést hodinový signál. Ale u R-S tvořeného hradly NOR jsou již oba vstupy kadého z hradel obsazené, proto tam přidáme před každé AND, na které se přivádí hodinový signál E:\n\n[[Soubor:RSlatchNOR.png]]\n\nMnohem jednodušší je to však u R-S tvořeného NANDy, kde je prakticky jeden vstup volný (rozdvojil se a přivedl do obou vstupů NANDu). Tam se jen přivede na ten druhý hodinový signál.\n\n[[Soubor:RSlatchNAND.png]]\n\nKlopný obvod R-S řízený úrovní nijak neřeší problém se zakázaným stavem a opět musíme při návrhu ošetřit, aby na obou vstupech nebyla zároveň úroveň H (při změně úrovně na vstupu E z H do L by se výstupy chovaly nepředvídatelně). Proto se R-S klopný obvod řízený úrovní v této podobě obvykle nepoužívá, je jej ale možné použít např. pro sestavení klopného obvodu typu D řízeného úrovní.\n\n======R-S klopný obvod řízený hranou======\nObvody řízené hranou se nazývají také \'\'flip-flop\'\'. Hranové klopné obvody jsou synchronizovány náběžnou nebo sestupnou hranou hodinového signálu C. Jedná se o velice krátký okamžik při přechodu hodinového signálu z úrovně L do H (náběžná hrana) nebo z H do L (spádová hrana). Ve zbylém čase (který tvoří naprostou většinu) obvod na změnu vstupních signálů nereaguje. Úrovně na výstupech synchronních sekvenčních obvodů se tedy mohou měnit pouze v okamžiku, kdy se mění úroveň hodinového signálu. Synchronní obvody fungují obecně následujícím způsobem: náběžnou (resp. sestupnou) hranou hodinového signálu se změní stavy všech klopných obvodů, dále probíhají přechodové děje v kombinačních obvodech, na které je vyhrazen dostatek času, a to až do příchodu další náběžné (resp. sestupné) hrany.\n\n[[Soubor:RSflipflop.png]]\n\nModré bloky na obrázku zastupují R-S klopné obvody řízené úrovní. Bude-li C=L, pak bude C1=H a C2=L. První klopný obvod se tedy bude překlápět podle měnících se signálů na vstupech R a S, ale druhý klopný obvod na něj nebude reagovat. Při přechodu C→H (tedy při náběžné hraně) se zablokuje první klopný obvod a zároveň odblokuje druhý R-S KO. Druhý klopný obvod tedy přenese signály Q1 a Q1\' na výstupy. Tyto signály se ovšem nemění až do příchodu úrovně L na vstup C vzhledem k tomu, že je nyní zablokován první klopný obvod. Vidíme tedy, že je signál vždy „uzamčen“ v přední nebo zadní části obvodu a samotné výstupy Q a Q\' nikdy přímo nereagují na změny vstupů. Při přechodu C --> L (sestupné hraně) se druhý klopný obvod uzavře a první otevře, což se na výstupech nijak neprojeví, ke změně dojde až s další náběžnou hranou. Obvody s podobnou strukturou označujeme jako obvody typu „master – slave“, první klopný obvod je master a druhý slave. Tyto názvy mají vyjádřit nadřazenost prvního klopného obvodu nad druhým.\n\nAčkoliv se klopné obvody R-S řízené hranou v praxi nepoužívají a v nabídce integrovaných logických obvodů je nenajdeme, poslouží nám k pochopení funkce synchronních klopných obvodů typu master-slave a také ke stavbě dalších „vylepšených“ klopných obvodů.\n\n----\n\n====D klopný obvod====\nU nejjednodušších klopných obvodů typu R-S jsme narazili na jeden nepříjemný problém, kterým je tzv. zakázaný stav. V zakázaném stavu jsou aktivní oba vstupy R (reset – vynulování) i S (set – nastavení) klopného obvodu. V takovém případě jsou na obou výstupech Q i Q\' stejné úrovně, což odporuje požadované funkci. Zároveň dochází k tomu, že obvod přejde do náhodného stavu, přejdou-li nyní oba vstupy do opačné úrovně.\n\n=====D klopný obvod řízený úrovní=====\nJednou z možností, jak elegantně vyřešit problém se zakázaným stavem, je přivádět pouze jeden datový vstup D, který se rozdělí do vstupů R a S, a před jeden z nich se dá invertor. Tím pádem nikdy nemůže nastat, že R a S budou mít stejnou hodnotu a tak nikdy nenastane zakázaný stav.\n\n[[Soubor:DlatchNAND.png]]\n\nD klopný obvod však již nemůže být asynchronní, jelikož řídícím signálem je právě hodinový signál E. Pokud je tento signál ve stavu L, tedy v nule, obvod se překlápět nebude a bude si udržovat hodnotu předchozího stavu (paměť). Pokud je E v jedničce (stav H), klopný obvod zapisuje hodnotu přiváděnou datovým vstupem D.\n\n[[Soubor:DlatchTab.png]]\n\n[[Soubor:DlatchDiagram.png]]\n\n=====D klopný obvod řízený hranou=====\nV mnohých případech je žádoucí, aby k přenosu dat ze vstupu D na výstupy klopného obvodu nedocházelo po celou dobu, kdy je vstup uvolnění E v úrovni H, ale pouze při náběžné nebo sestupné hraně tohoto signálu. Toho lze docílit např. zapojením dvou klopných obvodů D řízených úrovní.\n\n[[Soubor:Dflipflop.png]]\n\nNa obrázku je klopný obvod řízený \'\'\'sestupnou hranou\'\'\'. Ze zapojení je patrné, že vstupní signál D nemůže být nikdy přenášen přímo na výstupy Q a Q\', protože se vždy jeden z klopných obvodů D nachází v paměťovém režimu. Z toho vyplývá, že opravdu jediným okamžikem, kdy se D přenáší na výstupy Q a Q\' je když signál C přechází z H do L, protože master přenáší D na Q1 při C=H, a slave naopak přenese D2 na Q2 při C=L (kdy se chce zavřít první klopák a otevřít druhý. podle mě je to proto že ta hrana nikdy není kolmá jak by měla být, ale šikmá a v tu chvilku prakticky fungují oba obvody)\n\n[[Soubor:Dtab.png]]\n\nTeď se omlouvám, trochu vás zmatu, takhle to vypadá to zapisování u D klopných obvodů s \'\'\'náběžnou hranou\'\'\'. (pro sestupnou nenalezen pořádný obrázek)\n\n[[Soubor:Dgraf.png]]\n\n====J-K klopný obvod====\nPo klopném obvodu typu D představuje J-K klopný obvod (angl. J-K flip-flop) druhý základní typ bistabilního klopného obvodu. Podobně jako klopný obvod D vychází i klopný obvod J-K z původního R-S KO. Hlavním problémem klopného obvodu R-S byl tzv. zakázaný stav, který nastává, když jsou oba vstupy klopného obvodu (R – nulování i S – nastavení) v aktivní úrovni. Oproti R-S se tento klopný obvod vyrábí pouze v synchronní variantě.\n\n\nTento obvod nese označení po vědci jménem Jack Kilby (proto zkratka JK), který jej v roce 1958 představil ve firmě Texas Instruments. Protože název obvodu nemá žádný odvozený význam, existuje v angličtině mnemotechnická pomůcka pro označení vstupů „jump-kill“, tedy „nahoď-zruš“.\n\n[[Soubor:JK-1.png]]\n\nKlopný obvod J-K opět představuje určité vylepšení původního klopného obvodu R-S. Na rozdíl od klopného obvodu D zachovává klopný obvod J-K oba řídící signály pro nastavení a nulování, které se v tomto případě označují jako J (nastavení) a K (nulování), zavádí však navíc zpětnou vazbu z výstupů Q a Q\'. vzhledem k tomu, že Q a Q\' jsou navzájem negované, tudíž jedno bude 1 a druhé 0. Tím pádem, pokud jsou oba vstupy na 1 tak jeden z nich se díky tomu zruší.\n\n=====J-K klopný obvod typu master-slave řízený impulzem=====\nPodstatou obvodů typu master-slave je, že úrovně na vstupech nikdy nemohou přímo (tj. okamžitě) ovlivnit úrovně na výstupech klopného obvodu, protože části master a slave jsou ovládány opačnou úrovní signálu C. Stav celého klopného obvodu J-K se tak logicky může měnit pouze se změnou úrovně na vstupu C, tedy s náběžnou nebo spádovou hranou.\n\n[[Soubor:Jk1.png]]\n\nZatímco klopný obvod typu D řízený hranou byl vlastně založený na podobné struktuře dvou klopných obvodů typu R-S, zde je situace komplikovanější vzhledem k přítomnosti zpětných vazeb a změna stavu klopného obvodu tu probíhá dvoufázově. S náběžnou hranou hodinového impulsu se změní stav prvního klopného obvodu, další změny se však při C=H již neakceptují, protože stav výstupů, který ovlivňuje i vstupní hradla, se změní až se sestupnou hranou hodinového impulsu.\n\n[[Soubor:Jk2.png]]\n\n=====J-K klopný obvod řízený hranou=====\nPoužití klopných obvodů J-K typu master-slave, které jsou řízeny hodinovým impulsem, je trochu problematické vzhledem k tomu, že by se neměly v průběhu trvání hodinového impulsu měnit úrovně na vstupech J a K (jinými slovy, mezi náběžnou a sestupnou hranou je dost času na to, aby se hodnoty vstupů J a K změnily, a pak to dělá pičoviny). Z tohoto důvodu se tyto klopné obvody v praxi nepoužívají a místo nich se používají klopné obvody J-K řízené hranou, u nichž je rozhodující pouze stav vstupů J a K v okamžiku aktivní hrany hodinového signálu.\n\n[[Soubor:Jk3.png]]\n\nZajímavé je další chování klopného obvodu, kdy na obou vstupech J i K zůstává úroveň H. S každou další náběžnou hranou hodinového signálu (viz body 4 a 5 časového diagramu na obrázku) se změní stav obvodu a úrovně na výstupech Q a Q\'. Je-li totiž klopný obvod nastaven, uplatní se s následující náběžnou hranou hodinového signálu vstup K, a obvod se vynuluje (viz bod 4). Je-li naopak klopný obvod vynulován, uplatní se vstup J, a klopný obvod se s náběžnou hranou na C nastaví (viz bod 5). Na výstupech Q a Q\' tak získáme periodický signál s poloviční frekvencí hodinového signálu a střídou 1:1. Jinými slovy, zneguje se to co tam bylo.\n\n[[Soubor:Jk4.png]]\n\nCo se týče zapojení, podle všeho je to klasický J-K obvod, který je na prvním obrázku, ale tady je to celé.\n\n[[Soubor:Jk5.jpg]]\n\n====T klopný obvod====\nJe to bistabilní klopný obvod s jediným vstupem T (synchronní varianta má ještě hodinový vstup). Pokud je na vstupu T logická nula, obvod zachová předešlý stav. Po přivedení logické jedničky se předchozí stav zneguje. Synchronní variantu je možné realizovat pomocí klopného obvodu JK spojením jeho vstupů J a K. Asynchronní variantu je možno realizovat ze synchronní připojením signálu hodin ke vstupnímu signálu.\n\n[[Soubor:Tklopak.png]]\n\nT klopný obvod tvoří základ čítačů a děliček kmitočtu. Po přivedení pravoúhlého signálu s frekvencí f, dostaneme na jeho výstupu signál s frekvencí f/2 (dělička kmitočtu hodnotou 2)\n\n----\n\n\n==Čítače==\nTvoří samostatnou část sekvenčních logických obvodů a (jak z názvu plyne) slouží k počítání. To, co počítají, jsou impulzy přiváděné na vstup a na výstupu je pak výsledek v příslušném kódu. Řešení čítačů je zaoženo na bistabilních klopných obvodech s případnou podporou kombinační logiky (ta umožňuje vyřešit specifické požadavky na čítač).\n\nČítače dělíme na synchronní a asynchronní, a potom podle směru čítání, je na vpřed, vzad a obousměrné. Již dříve byly vysvětleny pojmy asynchronní a synchronní. V souvislosti s dělením čítačů na asynchronní a synchronní je však potřeba upozornit, že kromě základního významu je tu jeden význam navíc. A to, zda s příchodem počítaného impulzu dochází k překlopení všech klopných obvodů současně, nebo postupně.\n\nU synchronních čítačů je to současně, tedy překlopení je synchronní se vsuptním impulzem. U asynchronního čítače se s příchodem vstupního impulzu překlopí pouze klopný obvod nejnižšího řádu a postuně se přenáší do vyšších řádů.\n\nNejjednodušší realizací čítače je použít klopné obvody T (které zase můžeme vytvořit pomocí J-K klopných obvodů, když spojíme vstupy).\n\nKaskádní řazení čítačů lze použít pro dělení kmitočtu. Dělící poměry jednotlivých čítačů zapojených za sebou se násobí. Můžeme je také použít pro digitální hodiny, když to správně zapojíme, dělaly jsme něco podobného v IMP.\n\n===Asynchronní čítač===\nZ výše uvedeného popisu je tedy jasných několik nedostatků asynchronních čítačů. Jedna z nich je dána skutečností, že v době před ustálením je výstup nesmyslný. Druhým nedostatekm je relativní pomalost oproti synchronním čítačům (je n-krát pomalejší než synchronní, přičemž n je počet klopných obvodů). Proto se asynchronní čítače prakticky nepoužívají, výhodou je totiž jen jejich jednoduchost.\n\nNa obrázku je asynchronní tříbitový čítač, sestavených pokocí J-K klopných obvodů zapojených jako T KO. Nemá centrální hodinový signál, který synchronizuje všechny současně. Čítač generuje posloupnost 0-7\n\n[[Soubor:Citac1.png]]\n\nČasový diagram potom vypadá takto:\n[[Soubor:Citac2.png]]\n\nJe možné vytvořit i čítače se zkráceným cyklem, např. 4-bitový čítač, který generuje čísla pouze 0-9, nebo 0-11. V takovém případě se přidá na dva výstupy dekodér, který některé klopné obvody nuluje. \n[[Soubor:Citac3.png]]\n\nU toho čítače na obrázku se do dekodéru přivádí výstupy z Q2 a Q3, protože binární 12 je 1100, přičemž ty dvě jedničky odpovídají spomínaným výstupům. Z dekodéru potom lezou výstupy do těch samých KO, protože ty jedničky vynulují. Někde je možné vynulovat všechno, ale tady jsou použity T klopné obvody, které se překlopí na druhou stranu když se tam přivede signál, čoz nechceme. Znamená to však, že ona hodnota (10 nebo 12) se tam na okamžik objeví, a je to prakticky hodnota o 1 vyšší než maximum, čož může být považováno za menší hazard.\n\n===Synchronní čítač===\nSynchronní čítač je speciální případ synchronního automatu. Nevrhuje se stejně jako Mooreův automat (funkce stav = výstup). Na aktivní hodinový signál přechází ze stavu do stavu daného čítací posloupností. Vetšinou mají vstup, pomocí kterého lze řídit činnost čítače (zda budou čítat nahoru nebo dolů). Mají též výstup indikující přetečení čítače.\n\nAby se doba odezvy čítače na vstupní impuls snížila, byla opět poněkud modifikována topologie zapojení čítače tak, aby na klopné obvody byl přiveden vstupní impuls synchronně. V tom případě je však třeba zabezpečit, aby měnily stav jen ty klopné obvody, u kterých je to požadováno. Zde se plně využívá funkce obvodu typu T. Pomocí řídící logiky se ze stavu výstupů předcházejících obvodů určuje logická úroveň vstupu T a tedy skutečnost, zda klopný obvod změní nebo nezmění stav při aplikaci následného hodinového impulsu. Čítač se tak v době mezi impulsy “připravuje” na zpracování následného hodinového impulsu.\n\n----\n\n\n==Registry==\n===Paralelní registry===\nPirožek i Karel je ve svých stát. otázkách měli spomenuté, tak to sem dám taky. Ale prakticky jediná činnost toho je, že přečte všechny bity naráz a posune je dál.\n\n[[Soubor:Par_reg.gif]]\n\n===Posuvné registry===\nPosuvný registr je skupina klopných obvodů, která má propojené vstupy a výstupy tak, že s náběžnou hranou hodinového signálu jsou data (bity) synchronně posunuty o jeden klopný obvod.\n\n[[Soubor:Register.png]]\n\nObsah každého prvku se pak přesouvá do pravého nebo levého souseda (závisí na posunu), přičemž x je nový prvek.\n\n[[Soubor:Register1.png]]\n\n======Kruhový čítač======\nKruhový čítač, tzv. ring counter, je zvláštním použitím posuvného registru, kdy je poslední bit registu přiveden zpět na vstup registru.\n\n======Johnsonův čítač======\nTo samé co kruhový čítač, ale na vstup přívádí negovanou hodnotu posledního bitu. Čítá v Johnsonově kódu.\n[[Soubor:Johnson.png]]\n\n----\n\n\n==Stavové automaty==\nStavové automaty jsou sekvenční subsystémy představující zobecnění čítačů. Mohou být synchronní i asynchronní. Čítače můžeme pokládat za jednoduchý druh (zvláštní případ) stavových automatů.\n\nKonečný automat je šestice KA=(X,Y,Q,q0,P,V), kde:\n# X - vstupní abeceda (množina hodnot vstupních proměnných)\n# Y - výstupní abeceda (množina hodnot výstupních proměnných)\n# Q - vnitřní abeceda (množina hodnot vektoru vnitřního stavu - seznam stavů?)\n# q0 - patří do Q, počáteční stav, ze kterého se vždy startuje\n# P - přechodová funkce\n# V - výstupní funkce - Mealy, Moore, nebo jejich kombinace\n\nStavové automaty představují přechod od běžné logiky k mikrokontrolérům. Sekvenční způsob práce mikrokontrolérů (postupné vykonávání instrukcí) dovoluje mikrokontroléry použít v mnoha aplikacích pro řešení nejrůznějších úloh, a propůjčuje jim tedy velkou univerzálnost. Na druhé straně je však příčinou nižší rychlosti reakce, protože pro vytvoření odpovídajících výstupních signálů musí u typického mikrokontroléru proběhnout několik (často velmi mnoho) instrukčních cyklů. Pokud algoritmus vytvoření výstupních signálů není příliš složitý, je obvykle možno stejnou úlohu řešit stavovým automatem, který má strukturu navrženou speciálně pro řešený problém. Tato struktura pak bývá výrazně jednodušší a rychlejší.\n\nU čítačů jsou přechody převážně mezi sousedními stavy (inkrementace, dekrementace) a mají omezený počet vstupů, které ovlivňují chování čítače jednoduchým způsobem (up/down, reset...).\n\nU stavových automatů však mohou být přechody uspořádány zcela obecně, o \"sousedných stavech\" spravidla nemá smysl mluvit. Vstupů bývá víc než u čítačů, ty ovlivňují přechody mezi stavy obecným způsobem, které často nejde obecně popsat tak, aby to platilo pro celý automat, musí to být pro každý stav zvlášť.\n\nKonečné automaty mohou být buď plně definované, nebo neúplně definované. Nedefinované výstupy není třeba uvádět.\n\n======Moorův automat======\nVýstup je funkcí pouze současného stavu.\n[[Soubor:Moore.png]]\n\n======Mealyho automat======\nVýstup je funkcí současného stavu a vstupu.\n[[Soubor:Mealy.png]]\n\n======Mealyho/Moorův automat======\nSoučasné využití vlastností výstupní funkce Mealyho i Moorova automatu.\n[[Soubor:Mealymoore.png]]','utf-8'),(1599,'======Vestavěné systémy======\nJsou provozované jako součást jiných systémů. Provádění výpočtu v rámci VS je uživateli skryto. VS je téměř jakýkoli výpočetní nebo řídící systém jiný než stolní počítač. Jsou většinou jednoúčelové, určené pro předem definované činnosti.Vzhledem k tomu, že systém je určen pro konkrétní účel, mohou tvůrci systém při návrhu optimalizovat pro konkrétní aplikaci, a tak snížit cenu výrobku. Vestavěné systémy jsou často vyráběny sériově ve velkém množství, takže úspora bývá znásobena velkým počtem vyrobených kusů.\n\n\'\'\'Příklady:\'\'\'\n# bankomaty\n# herní konzole\n# kalkulačky\n# vybavení domácnosti - mikrovlnka, pračka, myčka nádobí...\n# montážní linky\n# mobilní telefony\n\n\'\'\'Vlastnosti:\'\'\'\n# Reaktivnost - odezva na podněty z prostředí\n# Autonomie - činnost bez lidského zásahu\n# Kritičnost - vplyv odchylek od normálního chování na bezpečné plnění úlohy\n# Jednoúčelovost - aplikační program beží v nekonečné smyčce\n\n----\n\n===Mikrokontroléry===\n=====Mikroprocesory=====\nMikroprocesor (uP) je základní procesorovou jednotkou (CPU) na čipu. Mezi jeho komponenty patří např. ALU, registry, řadič...\n\n[[Soubor:UP.png]]\n\nŘadič řídí chod celého mikroprocesoru a je tvořen registrem instrukcí, obvodem pro dekódování instrukce a řídícím obvodem, což souhrnně nazýváme řídící částí. Pro vytvoření počítače je ještě potřebné přidat vnější operační paměť a potřebné periferní jednotky. V nejlepším případě tak lze realizovat jednodeskový počítač (na jedné desce kompletní počítač). Mikroprocesory jsou jádrem osobních počítačů.\n\n\'\'\'Vlastnosti mikroprocesorů:\'\'\'\n# \'\'\'Otevřenost procesoru\'\'\' - neobsahuje na stejném čipu žádná perifení zařízení přímo v sobě, tudíž všechno musí být připojeno externě.\n# \'\'\'Vysoká cena\'\'\' - oproti ostatním typu mikroprocesorů se cena řídí především trhem\n# \'\'\'Vysoký výkon\'\'\' - CPU jsou svým výkonem daleko před jednočipovými mikropočítači a i před DSP (číslicový signální procesor, pro zpracování signálů)\n# \'\'\'Vysoká spotřeba a ztrátový výkon\'\'\' - hodně se zahřívají a potřebují účinné chlazení. Souvisí to s vysokým výkonem a vysokým odběrem (až ampéry).\n# \'\'\'Velké rozměry pouzdra\'\'\'\n\n----\n\n\n=====Mikrokontroléry=====\nMikrokontrolér je speciální druh mikroprocesoru pro zákaznicky specifické koncové aplikace (CD/MP3 přehrávače, pračky, mikrovlnky, telefony...). V současné době je sortiment mikrokontrolérů bohatý a je možné si jej vybrat téměř na míru podle typu a složitosti rešené aplikace. CPU jádro bývá u jednotlivých členů rodiny stejné, liší se jen výbavou periferních obvodů a velikostí programové paměti. Důležitou charakteristikou je šířka datové sběrnice, podle které členíme mikrokontroléry na 8, 16 a 32 bitové. Nejčastěji se používají 8mi bitové\n\n[[Soubor:Ukontroler.png]]\n\n----\n\n\n=====DSP procesory=====\nUrčitým kompromisem mezi mikroprocesorem a mikrokontrolérem je signálový procesor (DSP - Digital Signal Procesor). Je určen předvším ke zpracování signálů. Stručně řečeno, aby data, která do něj vstoupí, zpracoval a co nejrychleji je poslal na výstup.\n\n\'\'\'Výhody:\'\'\'\n# Velká rychlost zpracování číslicových dat\n# Velmi rychlé matematické operace jak v pevné, tak plovoucí řádové čárce\n# Schopnost zpracovávat velké objemy dat\n\n----\n\n\n=====Harvardská architektura=====\nCharakterizována tím, že se oddělí adresový (paměťový) prostor pro program (instrukce) a data. Zatímco u architektury obecných počítačů tato architektura téměř vymizela (u nich je program stejně proměnnou záležitostí jako data), u mikropočítačů pro vestavěné systémy má stále své místo a někteří výrobci ji využívají.\n\nKryje se přímo s filosofií vestavěného systému - program je relativně konstatní záležitostí po dobu životnosti systému, zatímco data se mění (odráží stav systému).\n\n=====Von Neumannovská architektura=====\nVon Neumannovská architektura je charakteristická tím, že program i data se nachází ve stejném paměťovém prostoru. Je to typická architektura pro univerzální počítače. Její výhodou je jednoduchost a \"přívětivost\" pro programátora (není problém se vzájemně nepropjenými paměťovými prostory).\n\n----\n\n\n===Periferie===\nJednočipový počítač může kromě základních součástí obsahovat další periferie:\n# řadič přerušení\n# časovače\n# čítače\n# watchdog timer\n# řadič displeje\n# řadič klávesnice\n# programovatelné hradlové pole\n\n=====Řadič přerušení=====\nKaždý řadič periferního zařízení má na konektoru systémové sběrnice jeden vývod (pin) pro generování žádostí o přerušení (nebo je více žádostí sdruženo do jednoho signálu). Tento signál však zřídka vede přímo do procesoru. Mezi procesorem a periferním zařízením je zařazen \'\'\'řadič přerušení\'\'\', který slučuje žádosti o přerušení z řadičů PZ a redukuje tak počet signálů pro komunikaci s procesorem na minimum.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n=====Časovače a čítače=====\nČítač je speciální registr, který kromě funkcí jako je čtení a zápis hodnoty zvyšuje nebo snižuje svoji hodnotu o jedničku při každé periodě hodinového signálu. Používá se zejména pro čítání událostí.\n\nČasovač v úzkém slova smyslu je čítač, jehož čas je zvyšován o jedničku hodinovým signálem mikropočítače. Jeho účelem je tedy odměřovat čas. V širším slova smyslu se někdy používá termínu časovač pro celý systém časovače zahrnující referenční volně běžící čítač a funkční moduly pro zachycení vstupu a generování periody popř. čítač impulsů.\n\n=====Watchdog=====\nJde o velmi jednoduchý prostředek zvyšující odolnost proti poruchám systémů, které jsou založeny na vykonávání programu – mikokontrolérů a systémů s procesorem obecně. Princip je velmi podobný principu tlačítka bdělosti, užívaného například v kolejových vozidlech. Strojvedoucí musí do uplynutí\nurčitého intervalu vždy stisknout tlačítko a dát tak najevo, že je bdělý a připraven reagovat na vzniklé situace. Od okamžiku stisknutí tlačítka běží nový interval. Pokud tlačítko nejpozději do uplynutí stanoveného intervalu strojvůdce nestiskne, vlak automaticky zastaví.\n\nWatchdog využívá jednoduchý princip, kdy pokud dojde k přetečení jeho čítače (čítač watchdogu nebyl včas resetován provedením speciální instrukce), celý systém se restartuje a program začne běžet znovu od začátku.\n\n=====Programovatelné hradlové pole=====\nProgramovatelná hradlová pole (FPGA, Field Programmable Gate Array) jsou speciální číslicové integrované obvody obsahující různě složité programovatelné bloky propojené konfigurovatelnou maticí spojů. Field Programmable v názvu je to, čím se FPGA odlišují od zákaznických integrovaných obvodů – obvod je „perzonifikován“ - nakonfigurován – u zákazníka.\n\nFPGA obvody dnes nacházejí uplatnění v široké škále aplikací díky své programovatelnosti, snadnému návrhu, flexibilitě, neustále klesajícím cenám a zvolna se snižující spotřebě energie vlastním čipem. Typické použití je v oblasti menších sérií navrhovaných zařízení, kdy se nevyplatí návrh zákaznického integrovaného obvodu a současně konvenční řešení systému s procesorem už není vhodné. Další aplikace můžeme nalézt například v oblasti prototypování složitějších zákaznických integrovaných obvodů. Velká programovatelná hradlová pole dnes umožňují i implementaci komplikovaných procesorů.\n\n----\n\n\n===Sériové rozhraní===\nPři sériovém přenosu jsou jednotlivé bity přenášeny po jediném vodiči postupně (v čase) jeden za druhým, zatímco u paralelního přenosu je v jediném časovém okamžiku k dispozici více bitů (pochopitelně každý bit na „svém“ vodiči). \n\nJestliže bity informace se objevují na jediném datovém vodiči postupně, je třeba jednoznačně určit, v kterém okamžiku je na datovém vodiči hodnota kterého bitu. Existují dva základní přístupy:\n\n# \'\'\'Synchronní sériový přenos\'\'\' - spolu s daty je přenášen i hodinový signál. Jeho hrany určují buď kdy se objevuje další bit na datovém vodiči či kdy je možné bezpečně sejmout hodnotu bitu na datovém vodiči.\n# \'\'\'Asynchronní sériový přenos\'\'\' - hodinový signál není přenášen, ale přijímač si jej generuje sám. Zde je třeba zajistit dostatečnou přesnost generátoru hodinového signálu v přijímači a prostředky, kterými je možné generátor hodinového signálu přijímače synchronizovat s generátorem vysílače.\n\n\n=====RS-232=====\nNormu RS-232 (RS = Recommended Standard) přijala počátkem 60. let Electronic Industry Association jako standard pro sériovou komunikaci. I když umožňuje i synchronní komunikaci, dodnes se v drtivé většine používá pro asynchronní. Tento standard přijali téměř všichni výrobci, a tak bylo umožněno propojovat zařízení vyrobené různými firmami.\n\nV RS-232 bylo definováno pouzití konektorů s 25ti nebo 9ti kolíky (piny)\n\n[[Soubor:Rs232.jpg]]\n\nV současné době se v oblasti osobních počítačů od používání sériového rozhraní RS-232 již téměř definitivně ustoupilo a to bylo nahrazeno výkonnějším Univerzálním sériovým rozhraním (USB). Nicméně v průmyslu je tento standard, především jeho modifikace, velice rozšířen a pro své specifické rysy tomu tak bude i nadále. Na rozdíl od komplexnějšího USB, standard RS-232 pouze definuje, jak přenést určitou sekvenci bitů a nezabývá se už vyššími vrstvami komunikace. V referenčním modelu ISO/OSI tak představuje pouze fyzickou vrstvu.\n\n----\n\n\n=====Asynchronní sériový přenos=====\nNa začátku přenosu by mělo dojít k synchronizaci hodin vysílače a přijímače. Je tedy třeba zajistit na začátku přenosu hranu (změnu úrovně). Tato start-bit hrana musí nastat vždy bez ohledu na hodnotu prvního přenášeného bitu. První informační bit se na datovém vodiči objevuje až po nějaké době od počáteční hrany. Tato doba je pochopitelně přesně dána, zpravidla to bývá jeden bitový interval – jeden takt generátoru hodin vysílače (a jeden takt generátoru hodin přijímače, který je nyní s generátorem hodin vysílače zcela čerstvě zesynchronizován).\n\n\'\'\'Start bit\'\'\' má hodnotu opačnou, nežli je klidová hodnota a má význam hlavně kvůli hraně kterou způsobí (synchronizace hodin).\n\nZa start bitem následují jednotlivé bity přenášeného slova. Často bývá doplněn ještě paritní bit. Je zřejmé, že musí být předem dohodnuto, kolik datových bitů bude vysíláno a zda bude doplněn paritní bit a o jakou paritu jde (sudá/lichá).\n\nZa posledním vyslaným datovým bitem a případným paritním bitem se vždy musí vyslat alespoň jeden tzv. stop-bit. Stop-bit má vždy hodnotu klidového stavu. Stop-bit slouží k tomu, aby oddělil od sebe dvě přenášená slova.\n\nCelou soustavu – start-bit, datové bity, příp. paritní bit, stop-bity‘ – v níž se přenáší jedno datové slovo nazývané rámec (frame).\n\n[[Soubor:Ramec.png]]\n\n======SCI======\nToto rozhraní se chová jako sériové asynchronní v souladu s tím, jak bylo popsáno výše. Modul rozhraní SCI obsahuje jak vysílač, tak přijímač, obě tyto části jsou na sobě nezávislé a mohou pracovat současně (tedy současně lze vysílat i přijímat, také někdy říkáme, že rozhraní SCI je plně duplexní).\n\nVýstup vysílače je vyveden na vývod označený TxD (transmit data), vstup přijímače je vyveden na vývod označený RxD (receive data). Tyto vývody zpravidla sdílejí vývod pouzdra mikrokontroléru s některým univerzálním portem.\n\nModul SCI má vlastní generátor hodinového signálu (společný pro přijímač i vysílač), který lze programově ovládat v širokém rozsahu a nastavit jej na řadu obvykle užívaných přenosových rychlostí. Taktéž další parametry modulu SCI lze programově nastavit. Jde například o počet přenášených datových bitů, paritní kontrolu atd. Přijímač i vysílač dokáže generovat přerušení jako reakci na nejrůznější události rozhraní – došlé slovo, odeslané slovo, chyba parity, chyba v rámci, chyba způsobená šumem (kolísání úrovně uvnitř bitového intervalu).\n\nPokud je rozhraní SCI správně nastaveno, data se vyšlou jednoduše tak, že se programově zapíší do datového registru rozhraní SCI (SCDR). Vše ostatní zařídí už vysílač sám – zkompletuje rámec a postupně jej odvysílá na výstup TxD s taktem generátoru hodinového signálu. Jediné, na co je třeba dávat před zapsáním dat pozor, zda je ve vysílači prázdno.\n\nPřijetí dat je opět jednoduché. Vše zařídí obvody přijímače a připraví v datovém registru SCDR kompletní přijatý bajt. Jediným problémem k řešení pak zůstává vystihnout okamžik, kdy je přijatý bajt k dispozici a je možné si jej v registru SCDR vyzvednout.\n\n----\n\n\n=====Synchronní sériový přenos=====\nStejně jako u asynchronní komunikace, je důležité určit pořadí přenášených bitů. Hodinový signál jednoznačně určuje, kdy je na datovém vodiči konkrétní hodnota daného bitu. Méně často se hodinový signál kóduje spolu s daty prostřednictvím modulace a přenáší se pak data i hodinový signál po společném vodiči. O který bit se v kterém taktu hodinového signálu jedná je dáno právě pořadím, které musí být předem dohodnuto.\n\nPřenosovou rychlost udává takt hodinového signálu. Většinou se nepoužívá žádný z režijních bitů (jako start bit a stop bit). \n\n[[Soubor:Synchr_prenos.png]]\n\n======SPI======\nModul synchronního sériového rozhraní SPI – Serial Peripheral Interface. Jak už napovídá název, jde o rozhraní určené k připojení periférií, může však být také využito ke komunikaci mezi mikrokontroléry. Toto rozhraní umožňuje kromě spojení „point-to-point“, tedy spojení dvou zařízení, také vytvoření jakési sběrnice, propojení více komponent, z nichž ovšem pouze dvojice může v jednom okamžiku \nkomunikovat. Rozhraní SPI je plně duplexní, v každém okamžiku vždy probíhá přenos oběma směry.\n\nKaždé zařízení připojené na rozhraní SPI, může být v jednom ze dvou režimů. Buď je to režim \'\'\'„master“\'\'\' nebo režim \'\'\'„slave“\'\'\'. Zařízení v režimu „master“ je zařízení, které generuje hodinový signál na příslušný vodič. Jen jediné zařízení by mělo být v režimu „master“. Pokud je více zařízení v režimu „slave“, právě zařízení „master“ rozhoduje o tom, které ze zařízení „slave“ mu bude partnerem v komunikaci. „Masterem“ zpravidla bývá mikrokontrolér, periferie se chová jako „slave“.\n\n[[Soubor:SPI.png]]\n\nNa rozdíl od rozhraní SCI, kde vysílač a přijímač pracují zcela samostatně a tok dat oběma směry může probíhat na sobě zcela nezávisle, u rozhraní SPI tomu tak není. „Master“ zahájí vysílání tím, že začne generovat hodinový signál na vývodu SPSCK a v jeho taktu vysouvá na vývod MOSI jeden za druhým datové bity z posuvného registru linky, zároveň však z druhého konce nasouvá do registru bity z vývodu MISO (tedy bity, které přichází od „slave“).\n\nPo 8mi taktech je tak původních 8 bitů odesláno, ale zároveň je v posuvném registru přijatých dalších 8 bitů od toho druhého. Po tomto může tato přijatá data zapsat do svého přijímacího datového registru a načíst nová data k vysílání (poslání) s vysílacího datového registru.\n\n----\n\n===Převodníky===\n=====A/D převodník=====\nAnalogově digitální převodník (zkratky A/D, v angl. i ADC) je elektronická součástka určena pro převod spojitého (neboli analogového) signálu na diskrétní (digitální). Důvodem je umožnění zpracování původně analogového signálu na číslicových počítačích. Používá se např. systémů pro digitální záznam a přenos obrazu a zvuku.\n\n[[Soubor:Signal.png]]\n\n[[Soubor:Signal_ad.png]]\n\nJelikož většina A/D převodníků vyžaduje, aby analogový signál zůstal během provádění A/D převodu nezměnen, bývá A/D převodníku předřazen obvod typu \'\'sample and hold\'\' nebo \'\'track and hold\'\', tzn. obvod, který je schopen zjistit a uchovat hodnotu sledované analogové veličiny do doby, než bude A/D převod dokončen.\n\n[[Soubor:AD.png]]\n\nPro správné navzrokování analogové veličiny musí být zajištěno, aby podle \'\'\'Shanonova vzorkovacího teorému\'\'\' platilo, že vzorkovací kmitočet A/D převoníku musí být alespoň 2x vyšší než nejvyšší kmitočet obsažený ve vzorkovaném analogovém signálu.\n\n----\n\n\n=====D/A převodník=====\nDigitálně analogový převodník (D/A, v angl. DAC) je elektronická součástka pro převod digitálního (diskrétního) signálu na analogový (spojitý). Je to potřebné např. ve všech přehrávačích - CD, MP3, zvukové karty...\n\n----','utf-8'),(1600,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Řadič periferního zařízení=====\nStará se o řízení periferních operací. S periferními zařízeními komunikuje řadič PZ přes množinu signálů, která je označována jako rozhraní PZ. Řadič PZ komunikuje s procesorem přes registry řadiče dostupné z procesoru pomocí instrukcí procesoru – do registrů je možné zapisovat, resp. jejich obsah číst. Na základě této informace řídí PZ. Informace uložená v registrech, jíž se řadič řídí při realizaci periferní operace jsou parametry PO. Součástí řadiče je tedy sada registrů, do kterých je možné tyto parametry zapisovat. dále obsahuje komponentu, která se řídí informací zapsanou procesorem do registrů a na základě této informace realizuje periferní operaci. Ta může být realizována např. sekvenčním automatem.\n\nV řadiči nalézá uplatnění i vyrovnávací paměť, jelikož je zde potřeba vyrovnat rozdíl v rychlosti komunikujících zařízení. V komunikaci řadič - PZ může být vyrovnávací pamět fyzicky umístěna jak v řadiči, tak v PZ.\n\n======Stavový a chybový registr======\nStavový registr (někdy označovaný jako chybový registr) je většinou součástí řadiče PZ. Obsahuje indikace o tom, že vznikl nějaký problém buď v PZ nebo řadiči. Součástí stavového registru je většinou bit, který je souhrnnou informací o stavu PZ a řadiče. Pokud je aktivován, je třeba analyzovat slabiky závad, které blíže specifikují typ poruchy/chyby. Slabiky závad periferních zařízení obsahují informaci o stavu logiky, napájecích napětí, mechanických částí, chyb v přenášených datech. Podle složitosti zařízení obsahují slabiky závad různý počet bitů. \n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená asynchronní systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená synchronní systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.\n\n----','utf-8'),(1601,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Řadič periferního zařízení=====\nStará se o řízení periferních operací. S periferními zařízeními komunikuje řadič PZ přes množinu signálů, která je označována jako rozhraní PZ. Řadič PZ komunikuje s procesorem přes registry řadiče dostupné z procesoru pomocí instrukcí procesoru – do registrů je možné zapisovat, resp. jejich obsah číst. Na základě této informace řídí PZ. Informace uložená v registrech, jíž se řadič řídí při realizaci periferní operace jsou parametry PO. Součástí řadiče je tedy sada registrů, do kterých je možné tyto parametry zapisovat. dále obsahuje komponentu, která se řídí informací zapsanou procesorem do registrů a na základě této informace realizuje periferní operaci. Ta může být realizována např. sekvenčním automatem.\n\nV řadiči nalézá uplatnění i vyrovnávací paměť, jelikož je zde potřeba vyrovnat rozdíl v rychlosti komunikujících zařízení. V komunikaci řadič - PZ může být vyrovnávací pamět fyzicky umístěna jak v řadiči, tak v PZ.\n\n======Stavový a chybový registr======\nStavový registr (někdy označovaný jako chybový registr) je většinou součástí řadiče PZ. Obsahuje indikace o tom, že vznikl nějaký problém buď v PZ nebo řadiči. Součástí stavového registru je většinou bit, který je souhrnnou informací o stavu PZ a řadiče. Pokud je aktivován, je třeba analyzovat slabiky závad, které blíže specifikují typ poruchy/chyby. Slabiky závad periferních zařízení obsahují informaci o stavu logiky, napájecích napětí, mechanických částí, chyb v přenášených datech. Podle složitosti zařízení obsahují slabiky závad různý počet bitů. \n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená asynchronní systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená synchronní systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší verze.\n\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.\n\n----','utf-8'),(1602,'======Principy provádění periferních operací======\nPod pojmem periferní operace budeme v tomto textu rozumět činnost periferního zařízení (PZ)realizované na základě nějakého podnětu (např. realizace instrukce procesoru). Periferní operace má buď charakter řízení (např. operace vystavení diskové paměti nebo přesun na další řádek/stránku tiskárny), nebo operace datové (tzn. s přesunem dat do PZ a její následnou manipulací na straně PZ).\n\n\'\'\'Na periferní operaci se podílejí:\'\'\'\n# Počítač (paměť, procesor)\n# Systémová sběrnice\n# Řadič PZ (adaptér)\n# V/V sběrnice\n# Periferní zařízení\n\n[[Soubor:PZ.png]]\n\n\'\'\'Posloupnost činností při realizaci periferní operace:\'\'\'\n\n\'\'\'1.\'\'\' Procesor vloží přes systémovou sběrnici parametry periferní operace do registrů řadiče.\n\n\'\'\'2.\'\'\' Procesor nastaví v řadiči bit „start operace“ - ten je součástí některého z adresovatelných registrů.\n\n\'\'\'3.\'\'\' Řadič PZ průběžně testuje stav bitu „start operace“ (je součástí některého z registrů řadiče).Pokud zjistí, že je aktivován, je to pro řadič PZ pokyn, aby zahájil periferní operaci, jejíž parametry byly předtím vloženy procesorem do registrů řadiče PZ.\n\n\'\'\'4.\'\'\' Řadič PZ spolu s PZ realizuje periferní operaci podle příkazu vloženého v předcházející fázi do registru řadiče PZ.\n\n\'\'\'5.\'\'\' Součástí realizace periferní operace je vytváření stavové informace (stavové slabiky), která reflektuje, jak periferní operace dopadla. Stavová slabika je přenesena do procesoru a procesorem analyzována.\n\n\'\'\'6.\'\'\' Pokud vznikla chyba/porucha (indikována jedním bitem ve stavové slabice), je do procesoru přenesena další upřesňující informace označovaná jako slabiky závad.\n\n----\n\n\n=====Řadič periferního zařízení=====\nStará se o řízení periferních operací. S periferními zařízeními komunikuje řadič PZ přes množinu signálů, která je označována jako rozhraní PZ. Řadič PZ komunikuje s procesorem přes registry řadiče dostupné z procesoru pomocí instrukcí procesoru – do registrů je možné zapisovat, resp. jejich obsah číst. Na základě této informace řídí PZ. Informace uložená v registrech, jíž se řadič řídí při realizaci periferní operace jsou parametry PO. Součástí řadiče je tedy sada registrů, do kterých je možné tyto parametry zapisovat. dále obsahuje komponentu, která se řídí informací zapsanou procesorem do registrů a na základě této informace realizuje periferní operaci. Ta může být realizována např. sekvenčním automatem.\n\nV řadiči nalézá uplatnění i vyrovnávací paměť, jelikož je zde potřeba vyrovnat rozdíl v rychlosti komunikujících zařízení. V komunikaci řadič - PZ může být vyrovnávací pamět fyzicky umístěna jak v řadiči, tak v PZ.\n\n======Stavový a chybový registr======\nStavový registr (někdy označovaný jako chybový registr) je většinou součástí řadiče PZ. Obsahuje indikace o tom, že vznikl nějaký problém buď v PZ nebo řadiči. Součástí stavového registru je většinou bit, který je souhrnnou informací o stavu PZ a řadiče. Pokud je aktivován, je třeba analyzovat slabiky závad, které blíže specifikují typ poruchy/chyby. Slabiky závad periferních zařízení obsahují informaci o stavu logiky, napájecích napětí, mechanických částí, chyb v přenášených datech. Podle složitosti zařízení obsahují slabiky závad různý počet bitů. \n\n----\n\n\n=====Přerušení=====\nPeriferní operace probíhají autonomně bez pozornosti procesoru. Periferní zařízení jsou většinou elektromechanická zařízení, jejichž činnost je tudíž časově výrazně náročnější než činnost procesoru. Proto musí být řadiče periferních zařízení schopny o ukončení PO informovat procesor. Vznikla takpotřeba zařadit do mechanismu obsluhy PO pojem „generování požadavku na přerušení a jeho obsluha“.\n\nJde o mechanismus, kterým mohou zařízení asynchronně oznámit procesoru nějakou událost. Probíhá to tak, že zařízení kontaktuje řadic prerušení, který podle priority vybere nejdůležitější přerušení. Vyhledá si v tabulce adresu, kam má skočit v programu procesor pro obsluhu tohoto přerušení. Procesor obdrží informaci o přerušení spolu s touto adresou a postará se o obsluhu. Potom skočí zpátky.\n\n\'\'\'Řadič přerušení\'\'\' tedy sdružuje žádosti o přerušení z jednotlivých zdrojů, řeší priority, zajišťuje první kroky obsluhy přerušení, komunikuje jednotným způsobem s procesorem tak, aby vyvolal potřebnou obslužnou rutinu přerušení.\n\n\n\'\'\'Typy přerušení:\'\'\'\n# \'\'\'Vnitřní přerušení\'\'\' - Jsou generovaná periferiemi, která jsou na čipu procesoru.\n# \'\'\'Vnější přerušení\'\'\' - Přerušeni od zařízení přístupného přes systemovou sběrnici.\n# \'\'\'Programové přerušení\'\'\' - způsobené instrukci INT x, parametr x je ukazatelem do tabulky přerušovacích vektorů.\n# \'\'\'Nemaskovatelné přerušení\'\'\' – přerušení mající vysokou prioritu.\n\n----\n\n\n=====Programová obsluha=====\n======Polling======\nOpak přerušení, procesor se neustále zařízení dotazuje na stav operace - výrazné zatížení procesoru. Procesor \"si přečte\" (tzn., přenese obsah) stavového registru (stavová slabika), aby zjistil, zda PO proběhla bez problémů. Pokud je ve stavové slabice indikovaná chyba (porucha), vyžádá si přenesení slabik závad\n(např. příkazem „ohlas závady“).\n\n----\n\n\n=====Přímý přístup do paměti=====\nDMA (Direct Memory Access) - pod pojmem přenos DMA rozumíme proces, při němž se data přenášejí z datového registru (např. řadiče periferního zařízení) přes sběrnici do operační paměti (ne přes procesor ani přes řadič DMA), příp. ve směru opačném.\n\nTzn. zařízení může požádat o DMA (obvykle přes řadič DMA). Pokud dostane svolení, může zařízení přes sběrnici rovnou pracovat s pamětí. Po otevření DMA komunikace mluví zařízení přímo s pamětí – ani procesor, ani řadič DMA do toho už nezasahuje!\n\n\'\'\'Řadič DMA\'\'\' - automat, který umí totéž co řadič sběrnice (generovat řídicí signály sběrnice)\n\n[[Soubor:DMA.png]]\n\n----\n\n===Sběrnice===\nProstředek pro připojení zařízení v počítači.\n\n\'\'\'Parametry:\'\'\'\n# \'\'\'Šířka sběrnice\'\'\' - Vyjadřuje se počtem bitů, které je možné jedním přenosem přes sběrnici přenést. Ovlivňuje šířku pásma sběrnice vyjadřovanou počtem slabik (byte) přenesených za jednotku času (s). Přes širší sběrnici se přenese za jednotku času více jednotek dat. (počet kabelů)\n# \'\'\'Rychlost sběrnice\'\'\' - Vyjadřuje, kolik datových bitů se přenese každou sekundu přes jeden datový vodič. (kolik bitů přeleze přes jeden kabel za sekundu)\n# \'\'\'Šířka pásma\'\'\' - - Šířka pásma definuje, jaký objem dat se přes sběrnici přenese za jednotku času. Vypočte se jako součin dvou parametrů: šířky sběrnice a její rychlosti.\n\n======Nesdílená sběrnice======\nkaždý typ informace (data, adresy, příkazy, stav) je přenášen po samostatných sadách vodičů.\n\n======Sdílená sběrnice======\nvšechny typy informace se posílají po jedné společné sadě vodičů => ve sběrnici pak musí být tzv. identifikační signály, kterými se rozliší, jaký typ informace je v aktuálním okamžiku na sběrnici. Druhá možnost – časový multiplex, tzn. jednotlivé informace přenášeny v přesně vymezených časových intervalech.\n\n----\n\n\n=====Princip přidělování sběrnice=====\nPřed vlastní datovou fází periferní operace musí proběhnout proces, jehož výsledkem je rozhodnutí o tom, ze kterého zařízení budou data přenášena – nejenom v situaci, kdy o přenos žádá více zařízení ale i tehdy, pokud jde o jedno zařízení.\n\n======Centralizované======\nV počítači existuje arbitr, který přijímá požadavky od všech adeptů (řadičů\nPZ). Na základě prioritního systému rozhoduje o tom, kterému zařízení bude sběrnice přidělena. Toto rozhodnutí neznamená, že toto zařízení bude vlastní přenos řídit – může to být realizováno např. řadičem DMA.\n\n======Distribuované======\nArbitr neexistuje, rozhodnutí o přidělení sběrnice provedou zařízení mezi\nsebou.\n\n----\n\n\n=====Možnosti sériového přenosu dat=====\nPokud jsou zapisovaná data beze změn přenášeného signálu, tak proces získávání\nsynchronizace je obtížný a vyžaduje speciální postupy.\n\n# \'\'\'Embedded clock\'\'\' - vlastnost, kdy je možno synchronizaci odvodit z dat (synchronizace je do přenášeného průběhu vložena)\n\n# Druhá možnost je další spoj v kabelu a další pozice v konektoru, synchronizační signál by měl vyšší kmitočet než přenášená data (změna synchronizačního signálu v každém bitovém intervalu), z hlediska rušení a přeslechů nevýhodné (tento problém bychom museli řešit kvůli přenosu synchronizace a nikoliv kvůli přenášeným datům - přidáváme si další problém). Distribuce synchronizace jinak než s daty činí problémy v situaci, kdy zvyšujeme kmitočet, kde je problémem realizovat při vysokém kmitočtu správně vzorkování – zpoždění na datech a synchronizaci mohou být různá a nemusí se nám dařit se správně „trefovat“ vzorkovacími hranami (nebo úrovněmi) synchronizačního signálu do přenášených dat a správně je vzorkovat („clock skew“)\n\n----\n\n====Systémová sběrnice====\nSlouží k připojení procesoru, řadiče prerušení, řadiče paměti, řadiče přímého přístupu do paměti (DMA), řadiče periferních zařízení, mostů mezi sběrnicemi. Zjednodušeně řečeno, systémová sběrnice je prostředkem pro propojení komponent výpočetního systému tak, aby bylo možno mezi nimi posílat data.\n\n\'\'\'Základní funkce systémové sběrnice:\'\'\'\n# přenos dat\n# adresaci prvků, mezi nimiž je přenos realizován\n# autonomní provádění periferních operací (tzn. sdělení o tom, že realizace autonomně prováděné operace byla skončena – většinou generováním žádosti o přerušení).\n# realizaci přenosů dat přes systémovou sběrnici bez pozornosti procesoru (přímý přístup do paměti)\n\n======ISA======\n\'\'\'Industry Standard Architecture\'\'\'. Nesdílená asynchronní systémová sběrnice, dnes celkem zastaralá. Někdy se označuje i jako AT bus. Umí přerušení, DMA, chybové signály...\nJe 16ti bitová, potom vznikla 32-bitová EISA (Extended ISA).\n\n[[Soubor:ISA.png]]\n\n======PCI======\n\'\'\'Peripheral Component Interconnect\'\'\'. Sdílená synchronní systémová sběrnice. Sběrnice umožňuje \'\'\'bus mastering\'\'\' – tzn. zařízení na sběrnici mohou býtvybaveny schopností převzít řízení sběrnice a následně sběrnici řídit. Je vybavena prostředky pro Plug and Play. PCI-X je rychlejší 64-bitová verze.\n\n[[Soubor:PCI.png]]\n\n======PCI Express======\nPCI Express je vysokorychlostní, sériový, nízkonapěťový diferenciální spoj pro komunikaci mezi dvěma zařízeními. Spoj je realizován jako dvojitý jednosměrný spoj (dva jednosměrné spoje). V počítačích se sběrnicí PCI Express není zapotřebí arbitr pro rozhodnutí o přidělení sběrnice pro přenos dat – spoj point-to-point.\n\n[[Soubor:PCIe.png]]\n\nPCIe, je na rozdíl od předcházejících typů sběrnic koncipována jako několik point-to-point seriových spojů (links) – nikoliv jako sdílený paralelní spoj. Sběrnice PCIe je sítí point-to-point spojů. Tyto spoje jsou směrovány v rozbočovači – ten funguje jako přepínač. Tam jsou tyto spoje ustaveny. Tato koncepce dovoluje, aby v konkrétním okamžiku spolu komunikovalo více dvojic zařízení.\n\n----\n\n====Vstupno/výstupní sběrnice====\nSlouží k připojení periferií. Z obrázky je zřejmé, jaký typ informace se přenáší mezi řadičem PZ a periferním zařízením. Informace o adrese má své opodstatnění v tom, že na sběrnici je připojeno více periferzích zařízení a součástí periferní operace musí být jednoznačná identifikace zařízení.\n\n[[Soubor:Vv.png]]\n\n======Centronics======\nParalelní rozhraní pro připojení tiskárny. Velmi jednoduché rozhraní, v nejjednodušší podobě předpokládá připojení pouze jednoho PZ. Komunikace probíhá jako klasický handshake (dotaz-odpověď). Nemá zádné slabiky závad, chyby indikuje stavovými bity.\n\n[[Soubor:Centronics.png]]\n\n======SCSI======\nParalelní sběrnice pro připojení různých typů PZ. Adresa je ve tvaru 1 z n (z osmi bitů bude jen jeden mít hodnotu 1). Nevýhodou je omezený počet adres. Výhodou je možnost využití distribuovaného přidělování sběrnice - není potřeba centrální arbitr, zařízení si proces přidělení sběrnice rozhodnou sama.\n\n[[Soubor:SCSI.png]]\n\n======IDE======\nParalelní rozhraní pro připojení disků. Označováno také jako PATA (Parallel ATA).\n\n======SATA======\nSériové rozhraní, data kódovaná způsobem 8/10b. Hodinový signál přenášený v datech.\n\n----','utf-8'),(1603,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]],\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], [[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n [[28 HTML a Javascript|28]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], \n[[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1604,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]],\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], [[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n [[28 HTML a Javascript|28]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1605,'====Techniky urychlování výpočtů v HW====\n# lze realizovat \'\'\'speciální kódování\'\'\' pro potřeby dané úlohy\n# lze realizovat \'\'\'speciální výpočetní jednotky\'\'\' pro potřeby dané úlohy\n# \'\'\'paralelní zpracování\'\'\' (násobné výpočetní jednotky)\n# \'\'\'řetězené zpracování\'\'\' - pipelining, překládané též jako proudové zpracování\n\n======Sekvenční zpracování======\nPokud chceme softvérově spocítat příklad S = A+B+C+D+E+F+G+H, tak se to bude zpracovávat sekvenčně pomocí jedné sčítačky a bude k tomu potřebných 7 kroků:\n \n[[Soubor:Sekvencni.png]]\n\nJe to ošklivé, pomalé a neefektivní.\n\n======Paralelní zpracování======\nPro urychlení této úlohy můžeme zvýšit počet sčítaček a zefektivnit tak, že přidané sčítačky budou provádět paralelně mezivýpočty, a pomocí toho snížít čas výpočtu této úlohy na necelou polovinu.\n\n[[Soubor:Paralelni.png]]\n\n----\n\n\n=====Řetezené zpracování=====\nOvšem i výše popsaný příklad můžeme zdokonalit! Sice zabere tři kroky vypočítat tamtem příklad, ale když se udělá první mezivýpočet, tak proč bychom měli nechat ty sčítačky se flákat, a čekat až vyleze ten první výsledek? Prostě jakmile se něco uvolní, tak do toho naflákáme další data. A nadalší výsledek potom nemusíme čekat další tři kroky, ale už jen jeden.\n\nPříklad:\nChceme upravovat pixely. Máme jich 65536, a zpoždění tohoto obvodu je 90ns.\n\n[[Soubor:Pixel.png]]\n\nAž jden pixel vyleze, může tam vlézt druhý. Tím pádem čas zpracování celého obrázku bude:\n\n\'\'\'65536 x 90ns = 5898240ns = 5,9ms\'\'\'\n\n\n\nKdyž ten obvod ale rozdělíme na menší části a přidáme jim registry, můžeme ten proces výrazně urychlit.\n\n[[Soubor:Pixel1.png]]\n\nV tomto příkladě byl obvod rozdělen na 9 menších částí. Nežse zpracuje první pixel, pořát to trvá 90 ns, ale každý další se objeví pouze z 10ns zpožděním. Tím pádem čas zpracování obrázku bude: \n\'\'\'90ns + 65535 x 10ns = 655440ns = 0,66ms\'\'\'\n\n\'\'\'Zrychlení: 8,9989 krát\'\'\'\n# není to 9x, protože se musí naplnit zřetězená linka\n# při výpočtu se neuvažovalo zpoždění registru\n\nŘetězené zpracování přináší urychlení výpočtu nejen v procesorech, ale i jiných číslicových obvodech. Pokud použijeme zřetězené zpracování v procesoru, musíme dodat řadu podpůrných obvodů a řešit řadu nových problémů.\n\n----\n\n\n======Zrychlení použitím řetězení======\n# \'\'\'N\'\'\' - počet vstupů, které zpracováváme\n# \'\'\'k\'\'\' - počet stupňů\n# \'\'\'t\'\'\' - zpoždění stupně\n# \'\'\'d\'\'\' - zpoždění registru\n# \'\'\'Zrychlení:\'\'\'\n[[Soubor:Vzorec.png]]\n\nZavést zřetězené zpracování má smysl, pokud máme dostatečně velké N a zpoždění stupňů je přibližně stejné.\n\nPokud však chcem být prestižní a tohle xrychlení nám nestačí, pořád to můžeme navíc skombinovat s paralelním zpracováním\n\n----\n\n======Řetězené zpracování instrukcí v procesorech======\nPrincip zřetězení se značně překrývá s principy procesorů typu RISC. Základní myšlenka: V procesorech CISC používají složité strojové instrukce (CPI >> 1) pouze špičkoví programátoři, ale standardní rutiny kompilátoru je nepoužívají. Výhodnější by bylo implementovat pouze jednoduché, ale rychlé instrukce.\n# Dojde ke zrychlení zpracování instrukcí a úspoře plochy na čipu.\n# Chybějící složité instrukce jsou nahrazeny podprogramy sestavenými z jednoduchých instrukcí.\n\nCílem je dosáhnout parametru instrukčního souboru CPI = 1. CPI = Cycles Per Instruction (počet cyklů nutných pro vykonání instrukce). Uvádí se u každé instrukce a také průměrná hodnotapro celý soubor. U procesorů RISC je to jediné číslo, protože doba vykonání je stejná pro všechny instrukce.\n\n# \'\'\'Teoretický řetězený procesor\'\'\'\n[[Soubor:Teor.png]]\n\n# \'\'\'Reálný řetězený procesor\'\'\'\n[[Soubor:Real.png]]\n\nV obou případech se jedná o ideální případy bez prostojů.\n# \'\'\'F\'\'\' - instruction fetch\n# \'\'\'D\'\'\' - instruction decode, register fetch\n# \'\'\'E\'\'\' - provedení, cyklus výpočtu efektivní adresy\n# \'\'\'M\'\'\' - přístup k paměti, cyklus dokončení skoku\n# \'\'\'W\'\'\' - uložení výsledků\n\n----\n\n\n\'\'\'Konflikty u řetězeného zpracování v procesorech, které mohou vést ke zpomalení linky:\'\'\'\n# \'\'\'Strukturální\'\'\' – obvodová struktura neumožňuje současné provedení určitých akcí – např. současné čtení dvou hodnot z paměti nebo současné provedení dvou sčítání, pokud má procesor jednu ALU.\n# \'\'\'Datové\'\'\' – když jsou zapotřebí data z předcházející instrukce, která není dokončena.\n# \'\'\'Řídicí\'\'\' – když skoková instrukce mění obsah PC, nebo jiné.\n\n\n\n\'\'\'Řešení těchto problémů:\'\'\'\n# \'\'\'Strukturální\'\'\' - rozdělit paměť na paměť instrukcí a paměť dat. Obecné řešení je například přidání výpočetních jednotek procesoru.\n# \'\'\'Datové\'\'\' - řešením může být \'\'\'bypassing\'\'\' - poskytnutí mezivýsledku dřív, než bude zapsán do registru. Je to umožněno přidáním speciálních datových cest\n# \'\'\'Řídící\'\'\' - problémy se skokovými instrukcemi. Možná řešení:\n## Zpožděný skok, tedy vložit jiné, užitečné instrukce, což znamená přeskládat instrukce programu.\n## Nelze-li takové užitečné instrukce najít, vložit NOPy (no operation).\n## Predikce skoku, rozpracovat pouze predikovanou možnost.\n## Rozpracovat obě možnosti pokračování skokové instrukce.\n\nU všech skoků je třeba zrychlit zjištění cílové adresy – k tomu se používá malá paměť cache pro uložení cílových adres (BTB – Branch Target Buffer), která se postupně naplňuje a aktualizuje. Pro nepodmíněné skoky a pro správně predikované podmíněné skoky se zřetězená linka nepozastaví.\n\n----\n\n\n====CISC====\nComplex Instruction Set Computing. Původní přístup k činnosti procesoru. Programy byly vytvářeny v assembleru ručně, co vedlo na vytváření komplikovaných a snadno použitelných instrukcií, různé adresové režimy, kombinované instrukce a pod. To dává velké možnosti optimalizace kódu a poskytuje obrovskou rychlost pro výpočet. Nevýhodou je, že kromě rozsahu instrukčního souboru trvá provedení každé instrukce různou dobu, co vede při použití řetězeného zpracování na velkou složitost řadiče. Ten je při CISC často tvořen dalším procesorem (mikrořadičem) obsahujícím vlastní mikroprogram (firmware). Při takto rozsáhlých instrukčních souborech je problém s překladem (překládač neumí využít všechny instrukce a adresové módy) což vedlo na zavedení architektury RISC. Aktuálně jsou dostupné procesory, které kombinují rysy obou přístupů (RISC i CISC).\n\n\nCISC architektura se jednoduše programuje a efektivně využívá paměť. Dříve se většinou programovalypočítače v asembleru a paměť byla pomalá a drahá, CISC architektura tedy měla svůj význam.\n# velké množství instrukcí (100-250)\n# instrukce o proměnné délce\n# instrukce pracují s operandy v paměti\n# velké množství adresovacích módů\n# mnoho a složité způsovy adresování\n\nS rostoucím objemem sady instrukcí však byo pro překladače překládající programy do strojového kódu obtížné využít celou škálu speciálních instrukcí --> jsou používány jen zřídka\n\n======Mikroprogram======\nKaždá složitější instrukce v CISC architekturách je rozložena na posloupnost tzv. mikroinstrukcí mikroprogramu, které jsou pak provedeny. Pro každou instrukci byl dříve mikroprogram, dnes je v CISC architekturách trend jednoduché instrukce převádět také na logické obvody, jako je tomu v RISC (kvůli rychlosti). Složitější instrukce jsou ale stále řešeny přes mikroprogram, protože implementace každé takové instrukce přes logické obvody by byla drahá a CISC počítače (PC) jsou určeny pro levnější cenovou třídu. Mikroprogram je uložený v ROM paměti. Výhoda mikroprogramu je také to, že přidání dalších instrukcí procesoru (přechod na vyšší verzi) znamená přidání mikroprogramu pro tuto instrukci, netřeba měnit obvody.\n\n----\n\n\n====RISC====\nReduced Instruction Set Computing.\n\n# Unifikovaný formát instrukcí – Vždy najdeme na stejných pozicích opcode a operand(y), což značně zjednodušuje dekódování instrukcí.\n# V jednom taktu se provádí jedna instrukce.\n# Identické registry, takže můžeme použít kterýkoliv z nich k čemukoliv chceme.\n# Jednoduché adresování – používá výhradně instrukcí LOAD a STORE.\n# Málo datových typů v hardwaru.\n\nNovější koncepce procesorů. Vychází z rozvoje překladačů a vysokoúrovňových jazyků, které ale omezují využití pokročilejších instrukcí CISC procesorů (překládač nedokáže kód tak dobře optimalizovat). V základě jde o to, že RISC má méně a jednodušších instrukcí, ale zato se provádí rychleji (ideálně všechny v jednom taktu) a tím usnadňují vývoj software ve vysokoúrovňovém jazyce. Řadič instrukcí pak nemusí obsahovat mikroprogram, ale je řešen pevnou logikou, co umožňuje větší frekvence. Rovněž zlepšují možnosti návrhu zřetězeného zpracování a zjednodušují návrh paralelismu. Procesory RISC mají většinou méně tranzistorů, což umožňuje přidat více registrů.\n\nRISC procesory mají nedestruktivní instrukce: výsledek operace se dává do jiného registru, než operandy. Používají se sady registrů např. k přepínání kontextu. Podprogram používá svoje registry, v původních tedy zůstavají data, která tam byla před skokem. Sady registrů jsou drahé. Dnes najdeme procesory RISC převevším ve vestavěných zařízeních.\n\n\nKoncepce RISC se netýká jen pouhého redukování instrukčního souboru. Je to spíše celá soustava a představ o tom, jak by měl být počítač realizován a jak by měl fungovat. Architektura RISC realizuje na první pohled paradoxní požadavek - větší výkon za nižší cenu a s jednodušším instrukčním souborem\n\n\'\'\'Charakteristické znaky:\'\'\'\n# minimální instrukční soubor (80-150 instrukcí)\n# jednoduché způsoby adresování\n# jednocyklové strojové operace\n# jeden nebo málo formátů instrukcí\n# řízení jednoduchou pevnou logikou\n# zřetězená realizace instrukcí\n\n\n\'\'\'Výhody:\'\'\'\n# redukovaná množina instrukcí\n# menší složitost, jednoduché instrukce\n# instrukce mají pevnou délku a neměnný formát\n# v každém strojovém cyklu pokud možno končí provedení jedné instrukce\n\n----','utf-8'),(1606,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]],\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], [[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n\n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1607,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31, 32\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]],\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], [[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n\n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1608,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ (Forein) - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*|.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]]\n \n====== RELAČNÍ KALKUL ======\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n[[Soubor:33_06.PNG]]\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1609,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ (Forein) - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace.\n\nKARDINALITA těla relace m = |R*| - maximální počet vztahů daného typu.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]]\n \n====== RELAČNÍ KALKUL ======\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n[[Soubor:33_06.PNG]]\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1610,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nHruška: n-ární relace R je libovolná podmnožina kartézského součinu.\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\nX x Y = {(x,y) | x náleží X, y náleží Y}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nV definice relace jsme určili, že relace má jistou aritu (je n-ární). Pro malá n máme pro relace speciální názvy: pro n=2 se relace nazývá binární relace\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n===Funkce===\n[[Soubor:Funkce.png]]\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n\n[[Soubor:Svaz.png]]\n\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1611,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nHruška: n-ární relace R je libovolná podmnožina kartézského součinu.\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\n<m>X x Y = {(x,y) | x in X, y in Y}</m>\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nV definice relace jsme určili, že relace má jistou aritu (je n-ární). Pro malá n máme pro relace speciální názvy: pro n=2 se relace nazývá binární relace\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n===Funkce===\n[[Soubor:Funkce.png]]\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n\n[[Soubor:Svaz.png]]\n\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1612,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nHruška: n-ární relace R je libovolná podmnožina kartézského součinu.\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\n<m>X x Y = </m>{<m>(x,y) </m>|<m> x in X, y in Y</m>}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nV definice relace jsme určili, že relace má jistou aritu (je n-ární). Pro malá n máme pro relace speciální názvy: pro n=2 se relace nazývá binární relace\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n===Funkce===\n[[Soubor:Funkce.png]]\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n\n[[Soubor:Svaz.png]]\n\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1613,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nHruška: n-ární relace R je libovolná podmnožina kartézského součinu.\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\n<m>X x Y = </m>{<m>(x,y) </m>|<m> x in X, y in Y</m>}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nV definice relace jsme určili, že relace má jistou aritu (je n-ární). Pro malá n máme pro relace speciální názvy: pro n=2 se relace nazývá binární relace\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n===Funkce===\n[[Soubor:Funkce.png]]\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n\n[[Soubor:Svaz.png]]\n\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1614,'Toto téma je kompilací všech možných zdrojů.\n\n=Množiny=\n\nMatematická struktura ve které se prvky neopakují, soubor objektů.\n\nVětšinou je však množina základní pojem a nedefinujese.\n\nMnožinu lze definovat výčtem nebo omezením (predikátem).\n\n • výčtem prvků: X={a,b,c,d} (Množina prvků a, b, c, d)\n • predikátem: X={a∣V(a)} (Množina všech prvků, pro které platí V)\n\nMůžeme mít množiny seřazené a neseřazené.\n\n==Operace==\n\n\'\'\'Rovnost množin\'\'\'\n\n\'\'\'Sjednocení\'\'\'\n\n\'\'\'Průnik\'\'\'\n\n\'\'\'Rozdíl\'\'\'\n\n\'\'\'Symetrický rozdíl\'\'\'\n\n[http://en.wikipedia.org/wiki/Set_(mathematics) Obrázky viz wiki]\n\n==Pojmy==\n\'\'\'Je prvkem\'\'\'\n\n\'\'\'Je komplementem\'\'\' (doplňkem)\n\n\'\'\'Systém množin\'\'\': taková množina jejíž prvky jsou množiny.\n\n\'\'\'Russelův paradox\'\'\': Holič má oholit všechny muže, kteří se neholí sami. (X={S∣S∉S})\n\n\'\'\'Potenční množina\'\'\': množina všech podmnožin (včetně prázdné a sama sebe), potenční množina množiny o n prvcích má 2^n prvků.\n\n\'\'\'Třídy rozkladu\'\'\': Jsou prvku rozkladu množiny. Taková množina je pak systém. Třídy rozkladu nemají průnik a jejich sjednocení je původní množina.\n\n===Prázdná množina===\n\nNeobsahuje žádné prvky.\n\nOpakem je neprázdná množina.\n\nMohutnost prázné množiny je 0.\n\n[[Soubor:Prazdna.png]]\n\nPrázdná množina je podmnožinou libovolné množiny:\n\n ∀ A: ∅ ⊆ A\n\nLibovolná množina se sjednocením s prázdnou množinou nemění:\n\n ∀ A: ∅ ∪ A = A\n\nPrůnik libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ ∩ A = ∅\n\nKartézský součin libovolné množiny s prázdnou množinou je prázdná množina:\n\n ∀ A: ∅ × A = A × ∅ = ∅\n\n==Zákony==\n\n[[Soubor:Zakony.png]]\n\n\n==Velikost==\n#Počet prvků A označujeme jako mohutnost, značíme ji ∣A∣ anglicky se jí říká kardinalita.\n\n#Množiny A a B jsou stejně mohutné, pokud dokážeme najít vzájemně jednoznačné přiřazení prvků množiny A do B\n\n#U nekonečných množin rozlišujeme spočetné a nespočetné množiny. \'\'\'Spočetné\'\'\' jsou všechny množiny se stejnou mohutností, jako množina přirozených čísel. Ostatní jsou \'\'\'nespočetné\'\'\'.\n\n=Relace=\n\n= Vztah\n\nHruška: n-ární relace R je libovolná podmnožina kartézského součinu.\n\nPrvky množin mají mezi sebou definované vztahy.\n\n\'\'\'Inverzní relaci\'\'\' získáme prohozením pořadí prvků v uspořádaných dvojicích, tedy\n<m>(a,b) in R doubleright (b,a) in R^{-1}</m>\n\n\'\'\'Definiční obor a obraz\'\'\' chápeme stejně jako definiční obor a obor hodnot funkcí.\n\n==Kartézský součin==\n\n<m>X x Y = </m>{<m>(x,y) </m>|<m> x in X, y in Y</m>}\n\n==Binární relace==\n\nSpeciální případ relace (může být ještě, unární, terární nebo obecně n-ární)\n\nV definice relace jsme určili, že relace má jistou aritu (je n-ární). Pro malá n máme pro relace speciální názvy: pro n=2 se relace nazývá binární relace\n\nJe podmnožina kartézského součinu DVOU množin.\n\nDále se budeme zabývat těmito.\n\n===Funkce===\n[[Soubor:Funkce.png]]\n\n==Vlastnosti relací==\n\n===Reflexivní===\n\nPokud pro každé a z X platí, že a je v relaci se sebou samým.\n\n<m>forall a in X, R(a,b)</m>\n\nPříklady:\n\n#„je rovno“\n#„je podmnožinou“\n#„je větší nebo rovno“\n#„dělí“ (dělitelnost) Tam opět platí, že číslo a je dělitelné samo sebou, tedy dvojice [a, a] je v relaci dělitelnosti (sedmička dělí sedmičku).\n\n===Symetrická===\n\nU symetrické relace platí, že pokud je v relaci nějaká dvojice, pak je v relaci i inverzní dvojice. Například relace být sourozencem. Pokud je Honza sourozenec Jany, pak je i Jana sourozencem Honzy.\n\nNapříklad „být narozen ve stejný rok“ je symetrická relace, ale „je menší než“ není symetrická.\n\n<m>forall a, b in X, R(a,b) doubleright R(b,a)</m>\n\n===Antisymetrická===\n\nMůže být silně nebo slabě antisymetrická.\n\n<m>forall a, b in X, R(a,b) wedge R(b,a) doubleright a = b</m>\n\nKlasickým příkladem antisymetrické relace je menší nebo rovno. Antisymetrie nám říká, že pokud jsou prvky [a, b] a [b, a] v relaci, pak jedině, když jsou si rovny, a = b. Relace menší nebo rovno to splňuje. Kdy platí a ≤ b a zároveň b ≤ a? Jedině v případě, že a = b. Když si dosadíme: platí 3 ≤ 5 a zároveň 5 ≤ 3? Ne. Ale platí 4 ≤ 4 a zároveň 4 ≤ 4.\n\n===Tranzitivní===\n\n<m>[(x,y)in R wedge (y ,z) in R ] doubleright (x,z) in R</m>\n\nNapříklad „je větší než“ a „je rovno“ jsou tranzitivní relace: pokud a = b a b = c, platí i a = c.\n\nPříklady:\n\n#„je podmnožinou“\n#„je větší než“\n#„je větší nebo rovno“\n#„je menší nebo rovno“\n#„dělí“ (dělitelnost)\n\n==Relace na množině==\nhttp://www.matweb.cz/binarni-relace-na-mnozine\n\n===Uspořádání na X ===\nreflexivní, antisymetrická, tranzitivní, znázorňuje se Hasseovým diagramem. Prvky, které nejsou spojeny jsou nesrovnatelné.\n====Lineárně uspořádaná množina====\nje uspořádaná množina, která neobsahuje nesrovnatelné prvky.\n===Ekvivalence na X===\nreflexivní, symetrická, tranzitivní\n===Tolerance na X===\nreflexivní a symetrická (nemusí být tranzitivní)\n===Kvaziuspořádání===\nreflexivní a tranzitivní\n===Svaz===\nje uspořádaná množina, ve které každé dva prvky mají průsek i spojení. (spojení je V a průsek je a zároveň).\n\n[[Soubor:Svaz.png]]\n\n[http://cs.wikipedia.org/wiki/Hasse%C5%AFv_diagram Hasseovy diagramy wiki]\n\n===Grupa===\nje množina s binární operací a je na ni uzavřená.\n\nGrupa splňuje tři axiomy:\n\n Asociativita: (a + b) + c = a + (b + c)\n Existence neutrálního prvku: a + 0 = a\n Existence inverzních prvků: a + (−a) = 0\n\n=Zobrazení=\n\nZobrazení je speciálním druhem relace R, kdy pro každé x z DomR existuje nejvýše jedno y z ImR, se kterým je v relaci. Je to podobné jako u funkce – pro každé x musí existovat maximálně jedno y.\n\n\'\'\'Funkce\'\'\' je speciálním případem zobrazení.\n\n==Injektivní==\n(prosté)\n\nKaždý prvek z Y má namapován nejvíce 1 prvek z X.\n\n==Surjektivní==\n\nKaždý prvek z Y má namapován alespoň 1 prvek z X.\n\n==Bijektivní==\n(bijekce, vzájemně jednoznačné)\n\nKaždý prvek z Y má namapován právě 1 prvek z X.\n\n[[Soubor:Zobrazeni_druhy.svg.png]]\n\n#a) je příklad kdy se nejedná o zobrazení.\n#b) je příklad prostého zobrazení \n#c) je vzájemně jednoznačné zobrazení \n#d) je zobrazení, které není prosté (surjektivní)','utf-8'),(1615,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22\n\n\'\'\'Zpracovává se\'\'\': 15, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 08, 09, 25 \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 (10)\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1616,'== Odkazy ==\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Soubor:You-shall-not-pass.png]]\n\nAbych osvetlila nazev: http://www.youtube.com/watch?v=0wE4rb5Dzvc\n\n\nhttp://www.fit.vutbr.cz/info/szz/\n\n[http://www.fit.vutbr.cz/info/rd/2013/rd08-130304.pdf Okruhy]\n\n[http://www.fit.vutbr.cz/info/szz/pokyny.rp.html.cs Pokyny]\n\n[http://wiki.koranda.net/doku.php?id=szz Karel]\n\n[https://www.dropbox.com/sh/59fuf2rmiwee93n/Z-SasX3HWD Pirožek]\n\nDalsi statnicova wiki (2009) http://kalabovi.org/pitel:isz:start\n\n[[Formátování]]\n\n[[Členové komisí]]\n\nTady najdete můj (Kirke) prográmek s řadicími algoritmy:\n[http://www.ulozto.cz/x2i8GfP/sort-exe Program]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Zdroják]\n\n[[https://www.fit.vutbr.cz/study/courses/WAP/private/opory/OporaIIS1MatematickeZakladyModelovani.pdf Zdroj od Hrusky k otázkám 16,19 a dalším]]\n\n[[Pudlova tajná wiki]]\n\n== Organizace ==\n\n\'\'\'Nezpracováno\'\'\': 20, 21, 22\n\n\'\'\'Zpracovává se\'\'\': 15, 10\n\n\'\'\'Hotovo\'\'\': 01, 02, 03, 04, 05, 06, 07, 08, 09, 11, 12, 13, 14, 16, 18, 19, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n\n\n\'\'\'Suave\'\'\'\n \n11, 12, 13, 14, 15(mess), 16, 19, 23, 24, 17 (20, 21, 22)\n \n\'\'\'Asheara\'\'\'\n \n38, 39, 40, 01, 02, 03, 04, 05, 06, 07, 08, 09, 25 \n\n\'\'\'Kirke\'\'\' \n \n18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 (10)\n\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[13 Principy grafických uživatelských rozhraní|13]] \n[[14 Spektrální analýza spojitých a diskrétních signálů|14]] \n[[15 Číslicové filtry|15]] \n[[16 Množiny, relace a zobrazení|16]] \n[[17 Diferenciální a integrální počet funkcí více proměnných|17]] \n[[18 Číselné soustavy a převody mezi nimi|18]] \n[[19 Boolovy algebry|19]]\n[[20 Regulární jazyky a jejich modely|20]] \n\n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[23 Numerické metody a matematická pravděpodobnost|23]] \n[[24 Řešení úloh|24]] \n[[25 Principy modelování a simulace systémů|25]] \n[[26 Datové a řídicí struktury|26]] \n[[27 Vyhledávání a řazení|27]]\n[[28 HTML a Javascript|28]] \n[[29 Hodnocení složitosti algoritmů|29]] \n[[30 Životní cyklus softwaru|30]]\n[[31 Jazyk UML|31]] \n[[32 Konceptuální modelování a návrh relační databáze|32]]\n[[33 Relační datový model a jazyk SQL|33]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]\n\n[[Suavin prehled]]\n\n== Seznam otázek ==\n\n\n[[1 Princip činnosti polovodičových prvků]] (dioda, bipolární a unipolární tranzistor ve spínacím režimu, realizace logických členů NAND a NOR v technologii CMOS) - ITO, IFY, INC \n\n[[2 Kombinační logické obvody]] (multiplexor, demultiplexor, kodér, dekodér, binární sčítačka) - INC, INP \n\n[[3 Sekvenční logické obvody]] (klopné obvody, čítače, registry, stavové automaty – reprezentace a implementace) - INC \n\n[[4 Hierarchie paměti v počítači]] (typy a principy pamětí, princip lokality, organizace rychlé vyrovnávací paměti) - IOS, INC, INP \n\n[[5 Vestavěné systémy]] (mikrokontrolér, periferie, rozhraní, převodníky) - IPR, IPZ, IMP \n\n[[6 Principy řízení a připojování periferních zařízení]] (přerušení, programová obsluha, přímý přístup do paměti, sběrnice) - IPZ (+ ITP) \n\n[[7 Princip činnosti počítače]] (řetězené zpracování instrukcí, RISC, CISC) - IPR, INP (+ITP) \n\n[[8 Minimalizace logických výrazů]] (algebraické metody, Karnaughova mapa, Quine McCluskey) - IDA, INC \n\n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači]] (doplňkové kódy, sčítání, odčítání, násobení, pevná a plovoucí řádová čárka, standard IEEE 754) - IAS, INP \n\n[[10 Principy VHDL]] (entita, architektura, proces, příklady kombinačních a sekvenčních obvodů) - INC, INP \n\n[[11 | 11 Metody rasterizace 2D vektorových objektů: úseček, kružnic a křivek]] - IZG\n\n[[12 Transformace, reprezentace a zobrazení 3D objektů]] - IZG \n\n[[13 Principy grafických uživatelských rozhraní]] (komunikační kanály, mody komunikace, systémy řízené událostmi, standardní prvky rozhraní) - ITU \n\n[[14 Spektrální analýza spojitých a diskrétních signálů]] - ISS \n\n[[15 Číslicové filtry]] (diferenční rovnice, impulsní odezva, přenosová funkce, frekvenční charakteristika) - ISS \n\n[[16 Množiny, relace a zobrazení]] - IDA \n\n[[17 Diferenciální a integrální počet funkcí více proměnných]] - IMA \n\n[[18 Číselné soustavy a převody mezi nimi]] - IAS \n\n[[19 Boolovy algebry]] - IDA \n\n[[20 Regulární jazyky a jejich modely]] (konečné automaty, regulární výrazy) - IFJ \n\n[[21 Bezkontextové jazyky a jejich modely]] (zásobníkové automaty, bezkontextové gramatiky) - IFJ \n\n[[22 Struktura překladače a charakteristika fází překladu]] (lexikální analýza, deterministická syntaktická analýza a generování kódu) - IFJ \n\n[[23 Numerické metody a matematická pravděpodobnost]] (numerické řešení algebraických a obyčejných diferenciálních rovnic, rozložení pravděpodobnosti, generování pseudonáhodných čísel) - INM, IMS \n\n[[24 Řešení úloh]] (prohledávání stavového prostoru, rozklad na podúlohy, metody hraní her) - IZU \n\n[[25 Principy modelování a simulace systémů]] (systémy, modely, simulace, algoritmy řízení simulace) - IMS \n\n[[26 Datové a řídicí struktury]] - IZP, IAL \n\n[[27 Vyhledávání a řazení]] - IAL\n\n[[28 HTML a Javascript]] (z pohledu návrhu webových stránek) - IIS (+ ITW) \n\n[[29 Hodnocení složitosti algoritmů]] (paměťová a časová složitost, asymptotická časová složitost, určování časové složitosti) - IZP, IAL \n\n[[30 Životní cyklus softwaru]] (charakteristika etap a základních modelů) - IUS, IIS \n\n[[31 Jazyk UML]] - IUS, IDS, IIS \n\n[[32 Konceptuální modelování a návrh relační databáze]] - IUS, IDS, IIS \n\n[[33 Relační datový model a jazyk SQL]] - IUS, IDS \n\n[[34 Principy a struktury správy souborů a správy paměti]] - IOS \n\n[[35 Plánování a synchronizace procesů, transakce]] - IOS, IIS \n\n[[36 Objektová orientace]] (základní koncepty, třídně a prototypově orientované jazyky, OO přístup k tvorbě SW) - IPP \n\n[[37 Programování v jazyku symbolických instrukcí]] (činnost počítače, strojový jazyk, symbolický jazyk, asembler) - IAS, IMP \n\n[[38 Služby aplikační vrstvy]] (email, DNS, IP telefonie, správa SNMP, Netflow) - IPK, ISA\n\n[[39 TCP/IP komunikace]] (model klient-server, protokoly TCP, UDP a IP, řízení a správa toku TCP) - IPK, ISA \n\n[[40 Směrování a filtrování dat v Internetu]] (algoritmy Link-state a Distance-vector, RIP, OSPF, klasifikace paketů a filtrování, firewally, kvalita služeb) - IPK, ISA (+ CCNA)\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n\n\'\'\'MediaWiki byla úspěšně nainstalována.\'\'\'\n\n[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.','utf-8'),(1617,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31, 32\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 33, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]],\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], [[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1618,'== RELAČNÍ DATOVÝ MODEL ==\n\n• Data jsou oddělená od implementace.\n\n• Veškerá data v relační databázi jsou reprezentována explicitní hodnotou (žádné ukazatele apod.).\n\n----\n\n==== KLÍČE ====\n\n• PRIMÁRNÍ KLÍČ je atribut, který jednoznačně identifikuje n-tici v relaci. Ostatní klíče se nazývají alternativní (sekundární).\n\n• KANDIDÁTNÍ KLÍČ – každá relace má alespoň jeden, je to atribut k relace R mající tyto dvě časově nezávislé vlastnosti: \n\n1) Je jednoznačný.\n\n2) Je minimální (neredukovatelnost).\n\n• CIZÍ KLÍČ (Forein) - splňuje tyto časově nezávislé vlastnosti: \n\n1) Každá hodnota FK je buď plně zadaná, nebo plně nezadaná.\n\n2) Existuje relace R1 s kandidátním klíčem CK tak, že každá zadaná hodnota FK je identická s hodnotou CK nějaké n-tice relace R1.\n\n==== RELAČNÍ DATOVÁ STRUKTURA (tabulka) ====\n\n• DOMÉNA - pojmenovaná množina skalárních hodnot téhož typu (např. doména názvů měst).\n\n• SKALÁRNÍ HODNOTA - nejmenší sémantická jednotka dat, atomická (vnitřně nestrukturovaná) (např. Josef Novák – nerozlišujeme-li jméno a příjmení).\n\n• SLOŽENÁ DOMÉNA – doména složená z několika jednoduchých domén (např. Josef, Novák).\n\n----\n\n====== RELACE ======\n\n[[Soubor:33_01.PNG]]\n\n• Relace na doménách D1, D2, ... ,Dn je dvojice R = (R, R*) \n\nSCHÉMA RELACE - R = R(A1:D1, A2:D2, ... An:Dn). Schéma relace zapisujeme často zjednodušeně ve tvaru R(A1, A2, ... ,An). \n\nTĚLO RELACE - R* ⊆ D1 x D2 x ... x Dn. \n\nSTUPEŇ (řád) relace - počet atributů n relace (počet sloupců).\n\nKARDINALITA těla relace m = |R*| - maximální počet řádků.\n\n• Je to základní abstraktní pojem relačního modelu (tabulka je forma znázornění relace).\n\n• Atribut relace reprezentuje sloupec tabulky, n-tice relace reprezentuje řádek tabulky.\n\n\'\'\'VLASTNOSTI\'\'\'\n\n• Neexistují duplicitní n-tice.\n\n• N-tice jsou neuspořádané (neseřazené).\n\n• Hodnoty jednoduchých atributů jsou atomické – relace je tzv. normalizovaná.\n\n----\n\n==== INTEGRITNÍ OMEZENÍ (PRAVIDLA) ====\n\n• Omezení plynoucí z reality reprezentované daty v databázi.\n\n• SPECIFICKÁ – pro konkrétní aplikaci (například, že každý šéf musí mít přidělenou sekretářku (nebo šéfová sekretáře!!)).\n\n• OBECNÁ – musí platit v každé databázi daného typu (týkají se primárních a cizích klíčů).\n\n====== PRAVIDLO INTEGRITY ENTIT ======\n\n• U žádné komponenty primárního klíče nesmí chybět hodnota (nesmí být NULL).\n\n====== PRAVIDLO REFERENČNÍ INTEGRITY ======\n\n• DB nesmí obsahovat žádnou nesouhlasnou hodnotu cizího klíče.\n\n----\n\n==== RELAČNÍ ALGEBRA ====\n\n• Relační algebrou rozumíme dvojici RA = (R, O), kde nosičem R je množina relací a O je množina operací.\n\n• Minimální množina operací relační algebry: sjednocení, rozdíl, kartézský součin, projekce, selekce.\n\n• Rozšířená relační algebra definuje dalších operace a pojmů (přiřazení, přejmenování (rename), agregační funkce,...)\n\n• Vhodný základ pro optimalizaci zpracování dotazů a pro hodnocení vlastností a porovnání relačních dotazovacích jazyků.\n\n• Databázový jazyk je relačně úplný (relationally complete), je-li alespoň tak mocný jako relační algebra.\n\n====== TRADIČNÍ OPERACE ======\n\n1) Sjednocení relací (union) - R1 = (R, R1*) a R2 = (R, R2*), R1 union R2 = (R, R1* ∪ R2*).\n\n2) Průnik (intersect) a rozdíl (minus).\n\n3) Kartézským součin (times) - R1 = (R1, R1*) a R2 = (R2, R2*), R1 times R2 = ((R1,R2), R1* x R2*).\n\n[[Soubor:33_02.PNG]]\n \n====== RELAČNÍ KALKUL ======\n\n• Alternativní formální prostředek pro manipulaci s daty v relačním modelu.\n\n• Relační algebra vyjadřuje JAK získat požadovanou relaci, relační kalkul vyjadřuje CO vytvořit.\n\n----\n\n== SQL ==\n\n==== DDL (DATA DEFINITION LANGUAGE) ====\n\n• Slouží pro definici dat a pohledů.\n\n• Všechny možnosti příkazů se mohou lišit podle typu databáze, v přehledu jsou použití společná většině databázových platforem.\n\n====== DATOVÉ TYPY ======\n\n• Řetězcové: CHARACTER(n), CHARACTER VARYING(n), BIT(n), BIT VARYING(n) \n\n• Numerické přesné - NUMERIC(precision, scale), DECIMAL(precision, scale)\n\n• Přibližné - INTEGER, SMALLINT, FLOAT(p), REAL, DOUBLE PRECISION \n\n• Datum a čas: DATE, TIME, TIMESTAMP \n\n• Intervalové: INTERVAL \n\n• Řetězcové (pouze v SQL/99): NATIONAL CHARACTER(n), NATIONAL CHARACTER VARYING(n), CHARACTER LARGE OBJECT…\n\n• Booleovský (pouze v SQL/99): BOOLEAN \n\n====== CREATE (VYTVÁŘENÍ NOVÝCH OBJEKTŮ) ======\n\n1) CREATE TABLE - vytvoření tabulky:\n\n CREATE TABLE jm_bázové_tabulky (def_sloupce, … [definice_integritních_omezení_tabulky]) \n\n• Definice sloupce:\n\n jméno_sloupce typ [impl_hodnota] [seznam_io_sloupce] \n\n• Integritní omezení (deklarativní): \n\n [CONSTRAINT jmeno] omezení\n\nIO sloupce: NOT NULL, DEUFAULT, UNIQUE, PRIMARY KEY, REFERENCES, CHECK\n\nIO tabulky : UNIQUE, PRIMARY KEY, REFERENCES, CHECK \n\n2) CREATE VIEW - vytvoření pohledu na základě výběru dat z existující tabulky či tabulek. K takto vytvořeným pohledům je možno vytvořit různá přístupová práva.\n\n CREATE VIEW <nazev pohledu> AS <SELECT prikaz> \n\n3) CREATE INDEX - vytvoření indexu:\n\n CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] \n INDEX <nazev indexu> ON <nazev tabulky nebo pohledu>(<nazev sloupce> [ASC | DESC] [,...n])\n\n4) CREATE PROCEDURE - vytvoření uložené procedury.\n\n5) CREATE SYNONYM - vytvoření synonyma:\n\n CREATE SYNONYM jm_synonyma FOR jm_tabulky \n\n====== ALTER (ZMĚNY EXISTUJÍCÍCH OBJEKTŮ) ======\n\n1) ALTER TABLE pro změnu struktury nebo způsobu uložení tabulky\n\nALTER TABLE jm_bázové_tabulky akce \n\n2) ALTER VIEW, ALTER INDEX, ALTER PROCEDURE...\n\n====== DROP (ODSTRAŇOVÁNÍ OBJEKTŮ) ======\n\n1) DROP TABLE pro odstranění tabulky (dat, struktury tabulky a uvolnění paměťového prostoru, který byl pro tabulku vyhrazen)\n\n DROP TABLE jm_bázové_tabulky [RESTRICT|CASCADE] \n\n2) DROP VIEW, DROP INDEX, DROP PROCEDURE …\n\n----\n\n==== DCL (DATA CONTROL LANGUAGE) ====\n\n1) GRANT autorizuje jednoho nebo vice uživatelů k provádění operace (nebo více operací) na objektu.\n\n2) REVOKE eliminuje grant (ten může být defaultním grantem).\n\n----\n\n==== DML (DATA MANIPULATION LANGUAGE) ====\n\n====== INSERT (VLOŽENÍ) ======\n\n• Vloží záznam do tabulky.\n\n INSERT INTO jméno_tabulky VALUES (hodnota1, hodnota2, hodnota3);\n INSERT INTO jméno_tabulky (jméno_sloupce1, jméno_sloupce2, jméno_sloupce3) VALUES (hodnota1, hodnota2, hodnota3);\n\n• Dále UPDATE (upraví hodnoty záznamu) a DELETE (smaže záznam)\n\n====== JOIN (SPOJOVÁNÍ RELACÍ) ======\n\n• Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze).\n\n• Pozn. Slova INNER a OUTER není nutné používat a v podstatě se ani nedoporučuje používat - zbytečně prodlužují zápis.\n\n• SQL umožňuje v klauzuli FROM uvádět nejen jména tabulek, ale i tabulkové výrazy, resp. výraz spojení.\n\n\'\'\'VNITŘNÍ SPOJENÍ (INNER )\'\'\'\n\n• Nejjednodušší varianta. \n\n1) Obecné na základě podmínky (T1 JOIN T2 ON A<C)\n\n2) Na základě rovnosti (equijoin) (T1 JOIN T2 ON A=D)\n\n3) Přirozené spojení (natural join) (T1 NATURAL JOIN T2) - Zvláštní případ, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Spojení je definováno pouze strukturou, moc se proto nepoužívá.\n\n\'\'\'VNĚJŠÍ SPOJENÍ (OUTER)\'\'\'\n\n• Generuje výstupní množinu omezenou o spojovací podmínky, pokud není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin.\n\n• Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.\n\n• Klíčová slova LEFT a RIGHT definují, která vstupní množina má ve výstupu zahrnuté všechny řádky (není doplňována o NULL). FULL - použijí se obě.\n\n[[Soubor:33_06.PNG]]\n\n====== SELECT (VÝBĚR) ======\n\n• Vrací množinu záznamů z jedné a nebo více tabulek.\n\n SELECT [ALL|DISTINCT] položka [[AS] alias_sl]… FROM tabulkový_výraz [[AS][alias_tab]]… \n [WHERE podmínka] \n [GROUP BY jméno_sloupce_z_FROM|číslo…] \n [HAVING podmínka] \n [ORDER BY jméno_sloupce_z_SELECT|číslo [ASC|DESC]]… \n\n• Míra implementace SQL dotazů se liší u každého SŘDB, proto je třeba mít při psaní konkrétních dotazů na zřeteli konkrétní SŘDB, na kterém bude dotaz prováděn.\n\n1) WHERE - udává jaké řádky budou ve výsledku. Může obsahovat i tabulkový výraz, typickým tabulkovým příkazem je poddotaz (příkaz SELECT). Omezuje ještě neseskupené záznamy.\n\n2) GROUP BY - shrnutí informace několika záznamů do jednoho záznamu. Za příkazem uvedeme název sloupce, podle kterého se mají záznamy seskupit (všechny záznamy, které mají stejnou hodnotu tohoto sloupce, se sloučí do jednoho záznamu).\n\n3) HAVING - velmi podobná podmínce WHERE. Omezuje seskupené záznamy. Musí se týkat sloupce, který má konstantní hodnotu anebo agregační funkce. Př. (HAVING `pocet` > 5)\n\n4) ORDER BY - specifikuje, podle čeho budou výstupní data seřazena.\n5) DISTINCT - uvedením tohoto klíčového slova se eliminují duplicitní řádky.\n\n----\n\n==== DATABÁZOVÉ POHLEDY ====\n\n• Pojmenované virtuální tabulky odvozené z bázových. \n\n• Používají se k omezení přístupu, skrytí logické struktury (bezpečnost), skrytí složitosti dotazu (zjednodušení).\n\n• Mohou z tabulky vybrat jen určité řádky (nebo sloupce).\n\n• Mohou spojovat data z více tabulek.\n\n• Pohledy se mohou odkazovat na další pohledy.\n\n• Vytvoření (uloží definici pohledu do systémového katalogu, sloupce musí mít jednoznačná jména (nebo přejmenovaná)): \n\n CREATE VIEW jméno_pohledu [(jméno_sloupce…)] AS tabulkový_výraz [WITH CHECK OPTION] \n\n• Zrušení (zruší informaci o pohledu ze systémového katalogu): \n\n DROP VIEW jméno_pohledu [RESTRICT|CASCADE] \n\n• Manipulace na pohledech - při dotazu se provede transformace na operace nad bázovými tabulkami. \n\n• Materializované pohledy - pohledy, u nichž je výsledek dotazu definujícího pohled skutečně fyzicky uložen v databázi a je zajištěna aktualizace obsahu. Zvýšení efektivnosti, resp. omezený přístup k datům (shrnující pohledy, replikace dat v uzlech distribuované databáze…). \n\n CREATE MATERIALIZED VIEW MBrnensti REFRESH ON COMMIT AS SELECT* FROM Klient WHERE mesto=\'Brno\' \n\n• Zjednodušují práci. Mohou sloužit jako jiné pojmenování tabulek.\n\n----\n\n==== TRANSAKCE ====\n\n• Jednotka, která zpřístupňuje, případně modifikuje data v databázi. \n\n• ACID vlastnosti (Atomicicty, Consistency, Isolation, Durability) – více v otázce 35 na konci.\n\n• Stavy: Aktivní (A), částečně potvrzená (PC), chybový stav (F), zrušená (AB) a potvrzená (C).\n\n• Nelze je zanořovat (tzv. „plochý“ (flat) model), jedinou implicitní zanořenou úrovní jsou samotné příkazy SQL.\n\n• Zahájení sezení (string1 identifikuje SQL server, string 3 uživatele, může být iniciováno několik spojení, pouze jedno je aktivní):\n\n CONNECT TO {DEFAULT|string1[AS string2][USER string3]}\n\n• Ukončení spojení (explicitní – v příkladu, implicitní - po posledním příkazu SQL v aplikaci):\n\n DISCONNECT {DEFAULT | CURRENT | ALL | string}\n\n• Ukončení transakce:\n\n COMMIT\n ROLLBACK\n\n----\n\n==== AGREGAČNÍ FUNKCE ====\n\n• Vypočítá funkci (počet všech, průměr, maximální a minimální hodnota, počet).\n\n COUNT (*)|AVG|MAX|MIN|SUM|COUNT ([ALL|DISTINCT] jm_sloupce)\n\n----\n\n==== PROCEDURA ====\n\n• Uložená procedura je sada příkazů, které jsou uložené na serveru, zkompilované (pro rychlost). Sada je provedena najednou.\n\n• Přispívá k zabezpečení serveru. Nastaveny tak, že: 1. Smí spouštět pouze někdo, 2. Mohou samy kontrolovat počet, typ, velikost a některé jiné charakteristiky parametrů, jež jsou jim posílány.\n\n• Často se používá pro: vybírání dat, vkládání, aktualizace, odstraňování dat, vytváření, používání a rušení dočasných tabulek, na matematické a statistické výpočty.\n\n• Příklad:\n\n create procedure sp_vratradky (od int, do int)\n begin\n select * from software where id between od and do;\n end\n\n• A zavolat pomocí příkazu:\n\n call sp_vratradky (10, 20)\n\n====== TRIGGER ======\n\n• Uložená procedura, která se spouští v souvislosti s provedením nějakého akčního dotazu na tabulce (vkládání, změna nebo mazání dat z databáze). Lze v něm mít například smyčku, podmínku, lokální proměnnou, matematický výpočet a podobně.\n\n• Triggerům není možné předávat žádné vstupní parametry (narozdíl od procedur) a nemohou vracet sadu záznamů.\n\n----\n\n==== DYNAMICKÉ SQL ====\n\n• Poskytuje možnost vytváření příkazů SQL jako textových řetězců za běhu.\n\n• Vytvoření příkazu: \n\n PREPARE jméno_příkazu FROM řetězec|proměnná\n\n• Vykonání příkazu: \n\n EXECUTE jméno_příkazu [INTO…][USING vstupní_hodnoty]\n\n• Uvolnění prostoru: \n\n DEALOCATE PREPARE jméno_příkazu\n\n• Vytvoření příkazu a bezprostřední provedení: \n\n EXECUTE IMMEDIATE řetězec|proměnná\n\n----\n\n==== EMBEDDED SQL ====\n\n• Hostitelská verze (zanořené SQL).\n\n• Princip spočívá v tom, že umožňuje do některého z vyšších programovacích jazyků vkládat příkazy SQL označené standardním prefixem. Ty jsou pak pomocí prekompilátoru přeloženy na volání funkcí knihovny, která realizuje spojení s databázovým serverem, překlad požadavků na server a odpovědí serveru. Soubor vytvořený prekompilátorem lze již přeložit překladačem konkrétního programovacího jazyka a připojit potřebné knihovny.\n\n• Umožňuje snadno přistupovat k databázi z cizího programovacího jazyka s využitím nativní funkcí.\n\n• Umožňuje přenositelnost zdrojového kódu databázové aplikace na různé databáze.\n\n• Zvyšuje přehlednost zdrojového kódu.\n\n• Místo volání patřičných funkcí příslušné databáze se píšou SQL dotazy přímo do zdrojového kódu aplikace.\n\n• Příkazy mají tvar:\n\n EXEC SQL SQL_příkaz \n\na jsou ukončeny dle zvyklosti jazyka (např. ; pro C).\n\n• Odkazy na proměnné hostitelského jazyka (vázané - „bind“) začínají „:“. \n\n• Referované hostitelské proměnné musí být definovány v deklarační sekci:\n\n EXEC SQL BEGIN DECLARE SECTION\n ......\n END DECLARE SECTION','utf-8'),(1619,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31, 32, 33\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n\n\'\'\'Rozuceno:\'\'\'\n\n [[18 Číselné soustavy a převody mezi nimi|18]],\n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], [[29 Hodnocení složitosti algoritmů|29]], \n\nWEB, DB:\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1620,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31, 32, 33\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n [[18 Číselné soustavy a převody mezi nimi|18]], [[29 Hodnocení složitosti algoritmů|29]], \n\n\'\'\'Rozuceno:\'\'\'\n\n \n\nISS, GRFIKA: \n\n [[13 Principy grafických uživatelských rozhraní|13]] , [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], \n\nWEB, DB:\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1621,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31, 32, 33\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Nauceno:\'\'\'\n [[13 Principy grafických uživatelských rozhraní|13]], [[18 Číselné soustavy a převody mezi nimi|18]], [[29 Hodnocení složitosti algoritmů|29]], \n\n\'\'\'Rozuceno:\'\'\'\n\n \n\nISS, GRFIKA: \n\n [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], \n\nWEB, DB:\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1622,'===Papirovy zapis===\n\nPrepsano: \n\n2, 11, 13, 14, 18, 26, 27, 28, 29, 30, 31, 32, 33\n\nNeprepsano:\n\n1, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25, 34, 35, 36, 37, 38, 39, 40.\n\n===Uceni===\n\n\'\'\'Finálně zkontrolováno\'\'\'\n\n\'\'\'Naučeno:\'\'\'\n [[13 Principy grafických uživatelských rozhraní|13]], [[18 Číselné soustavy a převody mezi nimi|18]], [[29 Hodnocení složitosti algoritmů|29]], \n\n\'\'\'Rozuceno:\'\'\'\n\n \n\nISS, GRFIKA: \n\n [[14 Spektrální analýza spojitých a diskrétních signálů|14]] , \n\nIAL, IZU: \n\n [[24 Řešení úloh|24]] , [[26 Datové a řídicí struktury|26]], [[27 Vyhledávání a řazení|27]], \n\nWEB, DB:\n\n [[32 Konceptuální modelování a návrh relační databáze|32]], \n \nSW ING:\n\n [[30 Životní cyklus softwaru|30]], [[31 Jazyk UML|31]], \n\nMatika:\n\nIFJ:\n\n\n\'\'\'Enqueued:\'\'\'\n\n [[33 Relační datový model a jazyk SQL|33]], \n\n [[16 Množiny, relace a zobrazení|16]], [[17 Diferenciální a integrální počet funkcí více proměnných|17]], [[19 Boolovy algebry|19]], [[23 Numerické metody a matematická pravděpodobnost|23]] \n\n\'\'\'Potřebuje vylepšení výpisku\'\'\'\n [[28 HTML a Javascript|28]], \n\n\'\'\'Zoufalstvi:\'\'\'\n\n[[1 Princip činnosti polovodičových prvků|01]] \n[[2 Kombinační logické obvody|02]] \n[[3 Sekvenční logické obvody|03]] \n[[4 Hierarchie paměti v počítači|04]] \n[[5 Vestavěné systémy|05]] \n[[6 Principy řízení a připojování periferních zařízení|06]] \n[[7 Princip činnosti počítače|07]]\n[[8 Minimalizace logických výrazů|08]] \n[[9 Reprezentace čísel a základní dvojkové aritmetické operace v počítači|09]] \n[[10 Principy VHDL|10]] \n[[11]] \n[[12 Transformace, reprezentace a zobrazení 3D objektů|12]] \n[[15 Číslicové filtry|15]] \n[[20 Regulární jazyky a jejich modely|20]] \n[[21 Bezkontextové jazyky a jejich modely|21]] \n[[22 Struktura překladače a charakteristika fází překladu|22]] \n[[25 Principy modelování a simulace systémů|25]] \n[[34 Principy a struktury správy souborů a správy paměti|34]] \n[[35 Plánování a synchronizace procesů, transakce|35]]\n[[36 Objektová orientace|36]] \n[[37 Programování v jazyku symbolických instrukcí|37]] \n[[38 Služby aplikační vrstvy|38]] \n[[39 TCP/IP komunikace|39]] \n[[40 Směrování a filtrování dat v Internetu|40]]','utf-8'),(1623,'==DNS==\n# Mapování doménových jmen na IP adresy (a naopak)\n# Databáze všech doménových jmen a IP adres\n# Databáze umístěna na specifickýc serverech – DNS serverech\n\nZákladní služby:\n# Doménová adresa -> IP adresa (A)\n# IP adresa -> doménová adresa (PTR)\n# Doménová adresa -> IPv6 adresa (AAAA)\n# IPv6 adresa -> doménová adresa (NAPTR)\n# Aliasy (CNAME)\n# Aliasy pro poštovní servery (MX) \'\'U každého záznamu nese prioritu tohoto servru\'\'\n# Rozložení zátěže na více aplikačních serverů\n# Delegování správy domén na jednotlivé subjekty\n\n====Architektura DNS====\n# Prostor doménových adres\n# DNS servery\n# Rezoluce DNS dotazů (resolver)\n\n----\n\n=====Prostor doménových adres=====\n# \'\'\'Hierarchické uspořádání záznamů – invertovaný strom\'\'\'\n## kořen stromu – spec. záznam root, název: řetězec délky 0\n## doména – podstrom v grafu doménových jmen\n## doménové jméno – cesta mezi vrcholem domény a kořenm stromu\n## listy stromu – konktétní síťová zařízení patřící do domény\n[[Soubor:DNS_strom.png]]\n# \'\'\'Uspořádání prostoru DNS do zón\'\'\'\n## decentalizovaná správa domén\n## absolutní adresa (FQDN) – posloupnost uzlů na cestě ke kořeni\n## zóna – fyzická část prostoru DNS pod jednotnou správou\n## speciální zóny – stub, hint \n### Stub – obsahuje pouze informaci o tom, které servery subdoménu obluhují.Sama neobsahuje žádná data\n### Hint – obsahuje seznam kořenovýc serverů DNS\n[[Soubor:Zony.png]]\n# \'\'\'Reverzní mapování adres\'\'\'\n## jednou z důležitých funkcí DNS\n## mapování IP adres na doménová jména\n## záznamy v datovém prostoru DNS jsou indexovány podle doménových jmen.Pokud známe doménovou adresu, můžeme snadno vyhledat IP adresu. Vyhledání doménové adresy pro známou IP adresu by znamenalo kompletné prohledání stromu a porovnávání všech uzlů -> pro praktické použití nerealizovatelné.\n## Proto existuje speciální doména, jejíž uzly jsou pojmenovány čísly reprezentujícími IP adresu -> doména in-addr.arpa.\n## např. doménová adresa kazi.fit.vutbr.cz, začíná nejméně obecnou položkou (kazi), která je vestromu DNS uložena nejdále od kořene. \n## Pro IP adresu je postup opačný, záznam DNS pro IP adresu 147.229.8.12 je 12.8.229.147.in-addr.arpa\n[[Soubor:In-addr.arpa.png]]\n\n\n# \'\'\'Registrace a správa domén\'\'\'\n## databáze DNS je spravovaná hierarchicky a distrubuovaná na velké množství serverů\n## koordinaci systému DNS zajišťuje organizace ICANN – zodpovědná za správu, přidělování a uložení doménových jmen\n\n----\n\n=====DNS servery=====\n# prostor doménových adres uložen fyzicky ve struktuře DNS serverů\n# každý DNS server obsahuje jen části DNS prostoru – zóny\n\n Typy DNS serverů:\n======Primární======\n# Obsahuje úplné záznamy o doménách, které spravuje\n# Záznamy uloženy lokálně v souboru\n# Pokytuje autoritativní (tj. vždy správné) odpovědi\n# Pro každou doménu právě jeden \n======Sekundární======\n# Získává data od primárního serveru\n# Musí zajistit pravidelný přenos zónových dat a aktuálnost dat\n# Také autoritativní pro danou doménu\n======Záložní======\n# Pracuje jako proxy server – přijímá dotazy od klientů a přeposílá je dalším DNS serverům\n# Když záložní server dostane odpověď na svůj dotaz, uchová si ji a použije ji i v budoucnosti\n# Poskytuje neautoritativní odpovědi\n\n----\n\n=====Rezoluce DNS dotazů=====\n# Proces vyhledání odpovědi v DNS systému\n# Využívá stromovou strukturu jmen – od kořenového DNS serveru\n\n======Rekurzivní dotazy====== \n# DNS server se sán snaží zjistit odpověď, pokud ji nezná – zasílá dotazy na další servery\n[[Soubor:Rekurzivni_dotaz.png]]\n======Iterativní dotazy======\n# šetří práci na straně serveru DNS\n# vrátí nejlepší odpověď, kterou může dát a dále se nedotazuje\n# pokud nenajde odpověď, vrátí adresy serverů, které jsou nejblíže hledané adrese\n# Nedotazuje se dále DNS server, ale ptám se dál já, pokud nedostanu uspokojivou odpověď (resolver)\n\n======Resolver======\n# klientský program, který získává informace od DNS serveru\n# systémová rutina, součást OS\n# činnosti:\n## Posílá dotazy na servery DNS\n## Interpretuje odpovědi od serveru\n## Předává informace uživatelskému programu, který o data žádal\n\n----\n\n==NetFlow==\n\'\'\'Monitorování počítačových sítí\'\'\'\n# Sledování obsahu paketů\n# Abychom zjistili, co se děje na síti (např. když něco nefunguje)\nAnalýza metadat (statistiky) – nedívá se přímo na jednotlivé pakety, ale na celé toky, nebo na nějaký provoz na určitou dobu a sbírá statistiky z hlaviček\n\n====Síťový tok====\n# proud paketů, stejná zdrojová a cílová adresa, stejný zdrojový a cílový port, typ služby\n# posloupnost paketů mající společnou vlastnost a procházejí bodem pozorování za určitý časový interval\n\n\'\'\'NetFlow identifikuje tok podle následujících položek\'\'\':\n# zdrojová a cílová IP adresa\n# zdrojový a cílový port\n# typ protokolu L3 (ICMP, IGMP, TCP, UDP)\n# název logického rozhraní, tzv. ifIndex\n# hodnota ToS (typ služby)\n-> pokud se pakety shodují v těchto položkách, jde o jeden tok\n\n----\n\n====Architektura NetFlow====\n# Exportér\n# Komunikační protokol NetFlow\n# Kolektor\n# Nástroje pro zobrazení dat\n[[Soubor:Netflow.png]]\n=====Exportér===== \n# Síťové zařízení (či software), které monitoruje procházející provoz\n# Vytváří záznamy o tocích (flow records)\n# Vytváří nový nebo aktualizuje starý záznam v paměti NetFlow cache\n# Vzorkování – vybírá jen některé pakety (náhodně nebo deterministicky)\n## důvod – snížení nároků na hw\n# Neaktivní tok – pokud nepřišel zádný paket k danému toku v daném časovém limitu\n\'\'\'Export toku:\'\'\'\n# detekce konce toku (např. FIN u TCP)\n# neaktivita toku – neaktivní timeout\n# příliš dlouhý tok – aktivní timeout\n# zaplnění paměti NetFlow cache\n\n=====Kolektor=====\n# Přijímá pakety NetFlow z jednoho čí více exportérů\n# Zpracovávání záznamů o tocích, možnost agregace (shrnutí) dat\n# Uložení statistik na disk nebo do databáze\n\n====Použití====\n# Monitorování sítě – sledování toků a provozu konkrétních síťových uzlů\n# Plánování sítě – detekce provozu, charakteristiky přenosu\n# Bezpečnostní analýza v reálném čase\n## detekce útoků v reálném čase (DDoS, DoS, vity, červy)\n## TCP SYN flood – příliš mnoho jednopaketových toků s TCP SYN\n## šiřící se červ – příliš mnoho odchozích toků z běžné stanice\n## odchylka od běžné komunikace – zavirovaný počítač \n# Dlouhodobé ukládání informací o přenesených datech\n## zákonná povinnost dle Zákona o elektronické komunikaci č. 485/2005\n# Sledování a analýza aplikací, uživatelů\n# Účtování\n\n----\n\n==SNMP==\n# Simple Network Management Protocol\n# Pro správu síťových prvků\n# Nastavování parametrů, sběr dat o existujících rozhraních\n=====SNMP Manager===== \n# zasílá dotazy agentovi a přijímá odpovědi\n# Stanice pro vyhodnocení dat\n=====SNMP Agent===== \n# dostává dotazy, odesílá odpovědi\n# Součástí zařízení\n# Samovolně posílá TRAPy\n## Zasílají se v definovaných situacích (např. překročení nějaké hodnoty)\n\'\'\'SNMPv2\'\'\' – SNMP využívá UDP, a ve v2 je implementována i kontrola doručení\n\n\'\'\'SNMPv3\'\'\' – Autentizace pomocí šifrování\n\n\'\'\'Porty:\'\'\'\n# Port 161 – na straně agenta (pro dotazy)\n# Port 162 – na straně managera (pro trapy)\n# Klient, který zasílá dotaz, využije dynamický port, z kterého posílá dotaz na port 161\n# Agent odpovídá z portu 161 na dynamický port klienta\n\n=====MIB databáze=====\n# Management Information Base\n# Každá hodnota v SNMP je jednoznačně identifikována pomocí číselného identifikátoru OID (Object Identifier)\n# Tato hodnota vznikne tak, že se vezme OID nadřazeného prvku a doplní se tečka a aktuální číslo\n# Celá tato stromová struktura je uložena v MIB databázi\n# Pro vlastní práci se SNMP MIB databázi nepotřebujeme, v SNMP paketu figuruje pouze OID, ale pokud ho neznáme, tak databáze nám může pomoci k jeho dohledání\n\n----\n\n==Elektronická pošta==\n\'\'\'Požadavky na přenos:\'\'\'\n# doručení zpráv přímo cílovému uživateli\n# bezpečné doručení zprávy\n# interní struktura zpráv (data pro přeposílání, posílání odpovědí...)\n# možnost vytvořit správy s různým typem obsahu\n====Architektura====\n=====Klient (UA – User Agent)=====\n# program pro vytváření a čtení zpráv, manipulace se schránkou\n=====Server (MTA – Message Transfer Agent)=====\n# přenos zpráv ze zdrojového počítače na cílový\n## Vytvoří obálku zprávy, po doručení ji odstraní\n## Pracují nad protokolem SMTP\n\n=====Protokol SMTP (Simple Message Transfer Protocol)=====\n\n----\n\n====SMTP – formát zpráv====\n# textový protokol\n# \'\'\'Struktura zprávy\'\'\':\n## Obálka (envelope)\n## Adresa odesílatele\n## Adresa příjemce, více příjemců\n## Priorita\n# \'\'\'Zpráva (message)\'\'\':\n## Hlavička zprávy (message header)\n## Tělo zprávy (message body)\n\n====MIME – přenos netextových dat====\n# zprávy mohou obsahovat přílohy\n# přílohy a jiné netextové informace je nutné vhodně repezentovat\n# umožňuje zasílat zprávy v jiném než základním kódování, netextové přílohy, přidat šifrování ke zprávám...\n\n====Komunikace přes SMTP====\n1. Navázání spojení – klient se připojí na server, server pošle uvítaci zprávu\n\n2. Identifikace klienta\n\n3. Přenos zprávy\n\n4. Ukončení komunikace\n\n# Pokud zpráva nemůže být doručena, vygeneruje se chybová zpráva a pošle odesílateli\n# Pokud je cílový server nedostupný, zpráva se zařadí do fronty a pokus o doručení se opakuje\n# Pokud se nedaří opakovaně doručit zprávu, pošta se přepošle na záložní poštový server\n# Doručená zpráva se ukládá (bez obálky) na cílový server do zvláštního souboru\n\n----\n\n====Čtení zpráv====\n=====POP3=====\n# TCP spojení, port 110\n# načítá data z poštovního serveru, kopíruje na lokální počítač\n# obsluhuje pouze schránku s příchozí poštou\n# požaduje výlučný přístup ke schránce – zámek\n# snadná implementace\n=====IMAPv4=====\n# TCP spojení, port 143\n# umožňuje práci s více scránkami\n# manipulace se zprávami na straně serveru\n# náročná implementace, velké nároky na výpočetní zdroje\n# možnost práce offline a následná synchronizace zpráv\n# server může zrušit spojení při neaktivitě klienta\n\n----\n\n==Hlasové služby==\n# Přenos hlasu po internetu v reálném čase\n===Skype=== \n# není to IP telefonie, je to jiný typ služby, jiný princip vytváření spojení, chybí tomu základní prvky IP telefonie\n# Je to aplikace, která běží nad aplikačním protokolem, všechno si dělá sama a struktura, kterou ona vytváří, patří mezi peer-to-peer\n## máme centrální body, které vybudují tu architekturu propojení nějakých uzlů v síti v rámci skype. Když se přihlásíme k hlavnímu serveru, tak on nás přesměruje na nejbližší aktivní „supernod“, a přes něj komunikujeme s partnerem (pokud mám veřejnou IP, stávám se supernodem)\n# Neprovádí většinu služeb, které IP telefonie provádí\n# Sdílení sítě, sdílení zdrojů, není to architektura IP telefonie\n\n----\n\n===Klasická telefonní síť (PSTN)===\n# IP telefonní síť musí pokrýt stejnou množinu služeb, nejlíp ve stejné kvalitě, jinak by to nikdo nechtěl \n# Pokud to nebude alespoň tak spolehlivé jako normální telefon, tak to firmy určitě nebudou chtít\n======Výhody klasické telefonní sítě======\n# \'\'\'garantovaná šířka pásma a spolehlivý přenos\'\'\' – minimálně 64kb pásmo na jeden hovor se spolehlivým přenosem\n# \'\'\'dobrá kvalita přenosu u digitálních ústředen\'\'\' – signál se kóduje\n# \'\'\'napájení\'\'\' – musí se řešit u IP telefonie a u klasické ne. Napájení u klasické telefonní sítě (ne bezdrátové), je z datového kabelu – je tam minimální napětí, které vysílá ústředna -> pokud nám vypadne proud, pořád můžeme zavolat. U VoIP telefonu máme smůlu a musíme doufat že je nabitý mobil \n# \'\'\'spolehlivost, bezchybnos\'\'\'t – dedikované spoje – nestane se, že by jsme se nedovolali, jen pokud nestíhá ústředna, pretížení linek – dnes zřídkakdy\n# \'\'\'zavedené standardy\'\'\'\n# \'\'\'další služby\'\'\' – např. Lokalizace účastníka – využívá se u záchranných služeb (u VoIP to nejde). Ve VoIP síti musíme mít mapování na telefonní čísla záchranného systému\n\n\n----\n\n======Architektura======\n# \'\'\'Koncová zařízení (edge devices)\'\'\' – analogové či digitální telefony. Analogové telefony přenášejí zvuk analogovým signálem, digitální telefony obsahují kodek, který převádí analogový signál na digitální\n# \'\'\'Lokální smyčka (local loop)\'\'\' – tvoří rozhraní do telefonní sítě. Obvykle jde o jeden pár kabelů, který přenáší hovor. Zákazník může mít více lokálních smyček\n# \'\'\'Přepínače či ústředny (switches)\'\'\'\n## mohou být centrální (CO, central office), které ukončují lokální smyčku a zajišťují vytváření a rušení hovorů, poskytují signalizaci a přepínání okruhů\n## druhým typem jsou privátní ústředny (PBX, private branch exchange), které jsou součástí zákaznické sítě. Podobné funkce jako centrální ústředny\n# \'\'\'Páteřní spoje (trunks)\'\'\' – propojují ústředny. Mohou propojovat privátní ústředny (tie trunk), privátní a centrální (CO trunk) nebo dvě centrální ústředny různých společností (interoffice trunk)\n[[Soubor:pstn.png]]\n\n======Vytváření hovoru======\n\n1. Když se zvedne sluchátko, zavře se el. okruh, a oznámí se úsředně, že někdo zvedl sluchátko\n\n2. Ústředna pošle vyzváněcí tón (to co slyšíme) a zároveň se přepne do stavu, kdy očekává, že pošleme výzvu, že chceme někomu volat (adresu). Adresa může být pulzní nebo tónová. Lisí se to kódovaním čísel, které odesíláme:\n# Pulsní – počet pulzů znamená číslo\n# Tónová – jiná frekvence, jiné číslo\n3. Tohle vše je lokální signalizace, potom nastává signalizace mezi ústřednami\n# pro lokální signalizaci se používá kontrolní, adresová a informační signalizace\n## Kontrolní – zvednutí/položení sluchátka, nebo když to má zvonit\n## Adresová – pulsní nebo tónová volba\n## Informační – když vytočíme, ozve se že číslo neexistuje, nebo je obsazené, nebo vyzvání\n[[Soubor:vyzvaneni.png]]\n\n----\n\n===IP telefonie===\n# služby založené na systémech klient-server, využívají ústředny, využívají jakési brány, které mají jasnou integraci do telefonních sítí a ta architektura z nich vychází\n\'\'\'Výhody IP telefonie:\'\'\'\n# \'\'\'cena\'\'\' – náklady minimální, za samotné hovory se neúčtuje nic, účtuje se za připojení do veřejné telefonní sítě\n# \'\'\'mobilita\'\'\' – všude kde je zásuvka pro připojení kabelů nebo PC, si můžu připojit VoIP telefon. Např. Pokud pracovník změní kancelář, tak si jen vezme telefon, který je na něj registrovaný a jde do další kanceláře. Nebo se telefon může přeregistrovat na moje telefonní číslo.\n# \'\'\'centrální správa systému\'\'\'\n# \'\'\'rozšířené vlastnosti telefonů a ústředen VoIP\'\'\'\n# \'\'\'přenos hlasu nad IP\'\'\' – integrace datových a hlasových služeb\n\n======IP telefon======\n# malý speciální počítač – má jen malou kávesnici, sluchátko, malý displej, vstup pro mikrofon, procesor, paměť....\n# Může na něm běžet cokoli, co procesor a OS zvládnou (má to vlastní OS) – možnost množstva aplikací\n\n======Požadavky na IP telefonii====== \n# \'\'\'Přenosové pásmo, kvalita signálu\'\'\' – obecně se na internetu služby doručují pomocí best effort. Ovšem u IP telefonie, pokud je linka zahlcena, nemůžeme čekat 5 vteřin dokud se pakety zahodí a jiné nahradí. U IP telefonní sítě druhá strana kabelu vede do místnosti se switchma -> switchovaná síť -> jde to do L2 zařízení\n# \'\'\'Spolehlivost sítě\'\'\' – vypadne L2 zařízení, nebo je zahlcené, vypadne napájení a odpojí to telefony nebo telefonní provoz -> musí se zajistit spolehlivost sítě duplikováním zařízení\n# \'\'\'Integrace s veřejnou telefonní sítí PSTN\'\'\' – uživatel se chce dovolat všude, ne jen na VoIP adresy\n\n======Funkce IP telefonie======\n# \'\'\'převod hlasu na IP datagramy (IP telefon)\'\'\' – u normálních telefonůpřevod hlasu závísí od toho, jestli se to bude posílat analogově nebo digitálně, u IP se to vždy digitalizuje. IP telefon to nejen digitalizuje, ale rovnou i odešle pakety\n# \'\'\'řízení komunikace\'\'\' – ústředna (gatekeeper)\n## Adresování hovorů\n## Směřování hovorů\n## Registrace účastníků\n# \'\'\'připojení do klasického telefonního systému\'\'\'\n## Brána (gateway) – převádí to do systému PSTN (Public Switch Telefony Network)\n## Brána převádí signalizaci VoIP na signalizaci telefonního systému\n\n----\n\n====Architektura====\n[[Soubor:voip.png]]\n# Jakmile se přes ústřednu naváže spojení a vymění se všechny parametry, tak komunikace nadále probíhá mezi koncovými uzly (proč by ústředna měla přenášet zbytečně moc paketů, že?). U IP telefonie je důležitá registrace účastníků\n \'\'\'Přenosové protokoly\'\'\'\n# signalizační – H.323, SIP, (Megaco/H.248, MGCP)\n# transportní – RTP, RTCP\n \'\'\'Základní komponenty\'\'\'\n# IP telefon\n## Může být hardwarový i softwarový\n## Konfigurace (dynamické profily), interaktivní telefonní seznam\n## Možnosti komunikace – www služby, instant messaging...\n# Ústředna (gatekeeper) – řízení přístupu, volání\n# Brána (gateway) – zjišťuje propojení VoIP a PSTN\n# Jednotka MCU – řízení komunikace více bodů (konferenčni hovory)\n# Aplikační servery – DHCP, DNS, LDAP, IM...\n\n----\n\n======Kódování hlasu====== \n# převod hlasu na IP datagramy\n[[Soubor:kodovani.png]]\n# Codec je zařízení, které digitalizovaný nasamplovaný hlas ukládá podle jakéhosi algoritmu do vzorků, které se posílají po síti. Různé typy algoritmů -> podle toho se určuje typ kodeku\n\'\'\'Typy kodeků:\'\'\'\n\n[[Soubor:kodeky.png]]\n\n\'\'\'Vzorkovací teorém\'\'\' – (2 x 4 kHz)- pokud chceme navzorkovat signál, musím vzorkovat dvounásobnou vzorkovací frekvencí, než je nejvyšší vzorkovací frekvence, kt. se používá v daném signálu -> kvůli rekonstrukci. Je pak možné to neztrátově dekédovat.\n# Používá se 4 kHz řeč -> vzorkuje se podle Nyquistova teorému\n\'\'\'Zapouzdření dat\'\'\'\n# Většinou se posílá po 20-30 ms, z toho vytvářím pakety které posílá, takže jsou relativně malé\n[[Soubor:paket.png]]\n\n\'\'\'Režie přenosu\'\'\'\n# RTP hlavička (12 B), UDP (8 B), IP (20 B) – dohromady 40 B, čož je hodně, samotná vzorka je častokrát menší než hlavička\n# Další bajty v linkové vrstvě – Ethernet (18 B), Frame Relay (6 B)\n# Pokud je to šifrovaný kanál, rostou bajty podle toho, zda je to IPSec transport (30-53 B) nebo IPSec tunel (50-73 B)\n# Přenosové pásmo takhle může z 64 kbps narůst až na 250\n\n======Výpočet šířky přenosového pásma======\n \'\'\'Šířka přenosového pásma kodeku\'\'\'\n# kódování G.711 (PCM): 8000 vzorků/s, každý vzorek 8 bitů\n# požadované pásmo: 8 kHz x 8 bitů = 64 kbps\n \'\'\'Velikost vzorky v paketu\'\'\'\n# Cisco: jeden rámec se vzorkou (PDU) za 20 ms\n# velikost vzorky: 20 ms x 64 kbps = 1280 bitů = 160 bajtů\n \'\'\'Potřebné přenosové pásmo pro PDU\'\'\'\n# zapouzdření – RTP (12), UDP (8), IP (20), Ethernet (18) – režie 58 B\n# paketů za vteřinu: 64 kbps / 1280 bitů = 50\n# celkové přenosové pásmo: (58 + 160) x 8 x 50\n# 8 je tam pokaždé, protože se rychlost na internetu měří v bitech, ne bajtech\n\n----\n\n====Sledování kvality přenosu====\n\'\'\'Kategorie vlyvů na přenos hlasu:\'\'\'\n# \'\'\'Ozvěna (echo\'\'\') – vzniká nežádoucím odrazem hlasového signály zpětk volajícímu\n## Akustické echo vzniká částečným přenosem hlasu ze sluchátka do mikrofonu\n## Elektrické echo může vzniknout v místě přechodu ze čtyřdrátového vedení na dvoudrátové\n## Potlačení echa obvykle umožňují mikrofony s potlačovači echa v moderních telefonních přístrojích, případně ho lze eliminovat aktivním potlačením v DSP\n# \'\'\'Zpoždení (delay)\'\'\' – způsobeno zdržením ve výstupních frontách či serializací, která závisí na velikosti paketu a rychlosti linky\n## Pevné zpoždění by mělo být do 150 ms\n## Aby hovor byl poslouchatelný, zpoždění 150-400 ms, výrazně horší kvalita\n## Nad 400 ms je to neposlouchatelné, hovor nelze dále provozovat\n# \'\'\'Kolísání zpoždění (jitter)\'\'\' – definuje se jako doba mezi očekáváným a skutečným příchodem paketu. Toto zpoždění vzniká během přenosu. Obecně se každý IP datagram posílá nezávisle na ostatních, takže po sobě jdoucí datagramy mohou jít jinou cestou. Když toto nastane, vzniká jitter\n## Lze eliminovat použitím vyrovnávacích bufferů na straně příjemce\n# \'\'\'Ztrátovost (packet loss\'\'\') – ke ztrátě paketů může dojít, pokud je síť nestabilní, dochází k zahlecením nebo různým zpožděním na síti\n## Existují kodeky, které umí rekonstruovat signál. Pokud dojde ke ztrátě souvislé řady paketů, rekonstrukce většinou není možná a dochází k výpadkům hlasového signálu\n# \'\'\'Kodek\'\'\' – algoritmus kódování a dekódování analogového signálu na digitální určuje, kolik hlasových informací bude vloženo do digitálního signálu. S tím souvisí i kvalita hovoru\n\n----\n\n=====ACR – Absolute Category Rating=====\n# Podle standardu ITU-T P.800 (1993)\n# Pětibodová hodnotící metoda poslechem – pošlou se určité věty, a poslucháči, kteří poslouchají hovor, ohodnotí známkou, zda byli problémy nebo ne\n# Výstupem je stupnice MOS (Mean Opinion Score)\n[[Soubor:MOS.png]]\n\n\'\'\'Metoda absolutního poslechu\'\'\' – subjektivní, máme poslucháče, kteří to posuzují, zda to bylo dobré nebo ne (průměr)\n\n\'\'\'Objektivní forma\'\'\' – máme k dispozici zdrojový i zakódovaný signál po přenose a porovnáváme je\n# Podle typu kodeků můžeme mít různé hodnoty MOS\n\n----\n\n=====E-model=====\n# Objektivní metoda, zohledňuje při výpočtu vlyv šumu, hlasitosti, kvantizačního zkreslení, způsob kódování, ozvěny, zpoždění, ztráty...\n# Nils Olaf Johanesson, 1998, standard ITU-T G.107\n# Výsledkem modelu je R-faktor: 0-100\n[[Soubor:rfaktor.png]]\n\nR0 – vysílaný poměr signál/šum (SNR), zahrnuje zdroje rušení v okolí\n\nIs – parametr lineárního zkreslení (pokles úrovně signálu a šum)\n\nId – vyjadřuje zkreslení způsobené zpožděním a echo\n\nIe – Vyjadřuje vlyv použitého zařízení na kvalitu hlasového signálu, zejména zkreslení způsobené při kódování\n\n[[Soubor:e-model.png]]\n\n----\n\n====Signalizační protokoly====\n======SIP – Session Initiation Protocol======\n# Textový aplikační protokol pro signalizaci VoIP\n# Přenášený UDP, hlavička a formátování podobné protokolu HTTP\n# Je to pouze signalizace, takže vytváření spojení\n# Neprovádí správu relací po jejich navázání\n# Nezajišťuje QoS\n\n======Protokol H.323======\n# Standard ITU-T, zahrnuje více protokolů\n# Slouží pro navazování multimediálního spojení obecně\n# Pro signalizaci používá několik protokolů – H.225.0 (TCP/UDP), H.245 (TCP), H.225.0 RAS (UDP)\n# Typy signalizace s H.323:\n## přímá – oba konce navážou registraci spojení s ústřednou a setup (inicializace spojení) se posílá přímo koncovým bodům a ty navážou spojení\n## přes ústřednu – endpoint se přihlásí, zaregistruje a potom navázání spojení jde přes ústřednu (gatekeepera) – logický kanál se vytváří mezi koncovými body navzájem\n# Většinou pro komunikaci mezi ústřednami\n# H.323 je základní protokol pri IP telefony, SIP nemá tolik možností','utf-8'),(1624,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (součet uzlů v levém a pravém podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu, je samovyvažující se.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\n[[Soubor:Boyer_moor.png]]\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce <m>O</m>\n\nOmega - dolní hranice, minimální rychlost růstu funkce <m>Omega</m>\n\nTheta - oznažuje třídu časového chování algoritmu <m> Theta </m>\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>\n int gap = array.Length / 2;\n while (gap > 0) // dokud je co porovnavat\n {\n for (int i = 0; i <= (array.Length - gap); i++)\n { // pro vsechny skupiny prvku s mezerou gap\n int j = i;\n int temp = array[i];\n while ((j >= gap) && (array[j - gap] > temp))\n { // na principu insertsort vlozi prvek na misto\n array[j] = array[j - gap];\n j = j - gap;\n }\n array[j] = temp;\n }\n\n // zmensi velikost mezery\n if (gap == 2) gap = 1;\n else gap = (int)(gap / 2.2); \n }\n </nowiki>\n\nVizualizace zde: [http://www.algoritmy.net/article/154/Shell-sort http://www.algoritmy.net/article/154/Shell-sort]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, uspořádá prvky na místě samém (in-situ), kvadratická časová složitost, nepotřebuje předzpracování, rekurzi ani zásobník. Velmi výkonný! Velmi rychle přesune prvky vysokých a nízkých hodnot na odpovídající stranu pole.\n\n\n----\n\n==== RadixSort ====\n\n\'\'\'Popis\'\'\': Radix sort řadí textové řetězce totožné délky tak, že nad každým znakem od konce těchto řetězců zavolá stabilní vnitřní řadicí algoritmus (seřadí řetězce podle posledního znaku, poté podle předposledního... ). Po n-tém průchodu jsou řetězce seřazeny dle všech pozic znaků.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, nepřirozená, časová složitost je počet znaků řetězce * složitost vnitřního řadícího algoritmu, délka řazených řetězců je konstantní.\n\n\n----\n\n==== MergeSort ====\n\n\'\'\'Popis\'\'\': Rozdělí neseřazenou množinu na dvě podmnožiny o přibližně stejné velikosti, tyto dvě podmnožiny seřadí a poté je spojí do jedné seřazené množiny. Pracuje rekurzivně, takže na nejnižší úrovni slučuje dvě množiny o jednom prvku.\n\n[[Soubor:Merge_sort_algorithm_diagram.jpg]]\n\n\'\'\'Princip slučování\'\'\' (spojení více seřazených podmnožin do jedné):\nPorovná se z každé podmnožiny největší prvek, větší je vložen do výstupní posloupnosti, menší zůstává tam, kde byl. Pokračuje se, dokud není některá podmnožina prázdná, ta druhá je celá vložena do výstupní posloupnosti.\n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, linearitmická časová složitost.\n\n\n----\n\n==== Další metody ====\n\n\'\'\'Řazení bez přesunu položek\'\'\'\n\nKaždý prvek pole má v jiném poli přiřazené číslo určující jeho pozici v seřazeném seznamu.\n\nPoužívá se pro objemná data, která se nevyplatí přesouvat v paměti. \n\n\'\'\'Řazení podle více klíčů\'\'\'\n\nNapříklad datum narození – rok, měsíc a den.\n\nŘešení 1: Vytvoření složené relace uspořádání – funkce, která mezi dvěma prvky rozhodne.\n\nŘešení 2: Postupné řazení dle vzrůstající priority jednotlivých klíčů (vyžaduje stabilní metodu) – nejdřív seřadí podle dne, pak podle měsíce a nakonec podle roku narození.\n\nŘešení 3: Aglomerovaný klíč – konverze N-tice klíčů na vhodný typ (často string) – například vytvoření rodného čísla.\n\n\'\'\'MacLarenův algoritmus\'\'\'\n\nUspořádá prvky na místě samém (in-situ), jen postupně prohazuje ukazatele dvou položek.','utf-8'),(1625,'= Vyhledávání =\n\n\'\'\'Klíč\'\'\' – má množinu hodnot (relace ekvivalence nebo relace uspořádaní), jednoduchý nebo strukturovaný. Klíč má v tabulce jednoznačnou hodnotu a slouží k identifikaci (vyhledávání) položky.\n\n\'\'\'Přístupová doba\'\'\' – doba potřebná k zajištění přístupu položky s hledaným klíčem. Pro hodnocení se používá minimální, maximální a průměrná doba úspěšného vyhledávání.\n\n\'\'\'Zaslepení položky\'\'\' – označení hodnotou, která nebude nikdy vyhledávána.\n\n\'\'\'Vyhledávací tabulka\'\'\' - obsahuje výsledek operace vyhledávání subjektů pro urychlení, může být tvořena staticky (jednou, pravidelně např. každý rok) nebo dynamicky.\n\n <nowiki>\n bool found = false; \n while (!found && // mnozina neni vycerpana) \n {// prozkoumej prvek, kdyztak nastav nasel}\n // uloz nalezeny prvek, vrat vysledek\n </nowiki>\n\n\n----\n\n=== Sekvenční vyhledávání ===\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n bool nalezeno = false;\n int i = 0;\n while (!nalezeno && i<=n) \n { // testuje nalezeni a konec pole\n if (klic == tabulka[i].klic) nalezeno = true;\n else i++;\n } \n return nalezeno;\n }\n </nowiki>\n\n=== Sekvenční vyhledávání v seřazeném poli ===\n\nPodmínkou je relace uspořádání nad typem klíč – pole je seřazeno dle velikosti, urychluje neúspěšné vyhledávání.\n\nVšechno ostatní se zkomplikuje (například operace delete a insert, které musí najít správné místo).\n\n\'\'\'Search\'\'\' - jde od nejnižšího čísla, skončí, když najde vyšší číslo\n\n\'\'\'Insert\'\'\' - najde místo pro vložení prvku, zbytek posune doprava \n\n\'\'\'Delete\'\'\' – posune segment doleva přes smazané prvky\n\n <nowiki> \n public bool Search(tab tabulka, int klic, int n)\n {\n bool konec = false;\n int i = 0;\n while (!konec && i<=n) \n { // testuje konec vyhledavani a konec pole\n if (klic >= tabulka[i].klic) konec = true;\n else i++;\n } \n return (tabulka[i] == klic);\n }\n </nowiki>\n\n=== Rychlé sekvenční vyhledávání ===\n\nNa konec obsazené části tabulky je přidána zarážka, do té je vložen hledaný klíč. Vždy skončí nalezením, díky zkrácení booleovského výrazu je rychlé (vynechává test na konec pole).\n\n <nowiki>\n public bool Search(tab tabulka, int klic, int n)\n {\n int i = 0;\n tabulka[n + 1].klic = klic; // vlozeni zarazky za konec\n while (klic != tabulka[i].klic) i++; // hleda klic\n return (i!=(n+1)); // dorazil-li k zarazce, vrati false\n }\n </nowiki>\n\n\n----\n\n=== Vyhledávání v poli s rekonfigurací ===\n\nPřesunuje nejčastěji vyhledávané prvky dopředu. Když je prvek vyhledán, provede se následující kód (znak „:=:“ zde reprezentuje prohození prvků).\n\n <nowiki>if (i>1) {tabulka[i] :=: tabulka[i-1];}</nowiki>\n\n\n----\n\n=== Binární vyhledávání ===\n\nPrvky pole jsou seřazeny vzestupně, algoritmus postupně prochází metodou půlení intervalu jednotlivá čísla, tento průchod odpovídá průchod binárním stromem.\n\n\'\'\'Binární vyhledávací strom\'\'\' – pro každý uzel platí, že klíče všech uzlů levého podstromu jsem menší než klíč v uzlu a klíče všech uzlů pravého podstromu jsou větší než klíč v uzlu. Pomocí InOrder získáme posloupnost prvků seřazenou podle velikosti klíče.\n\n[[Soubor:binarni_vyhledavaci_strom.jpg]]\n\n\'\'\'AVL strom\'\'\' – výškově vyvážený (výška levého a pravého podstromu se liší maximálně o 1), maximální složitost je větší než u nevyváženého stromu, je samovyvažující se.\n\n=== Uniformní vyhledávání ===\n\nOdchylky mezi podstromy na dané úrovni jsou vždy stejné (například pod uzlem 16 jsou uzly 12 (16-4) a napravo 20 (16+4), pod uzlem 12 je nalevo 9 (12-3) a napravo 15 (12+3)…). Takové vyhledávání je vhodné v případě, že je půlení intervalu (dělení) časově náročné.\n\n=== Fibonacciho vyhledávání ===\n\nMísto binárního vyhledávacího stromu používá Fibonacciho strom, jeho základem je Fibonacciho posloupnost (následující prvek je součtem aktuálního prvku a jeho nejbližšího předchůdce 0,1,1,2,3,5…).\n\n\n----\n\n== Tabulky s rozptýlenými položkami (Hashovací tabulky) ==\n\nTabulká má mapovací funkci (např. K mod (max+1)), která jednoznačně přiděluje každému z množiny klíčů výslednou pozici. Při vyhledávání je tato funkce znovu spuštěna a přistupujeme přímo na příslušný index. \n\nPokud se stane, že je výsledkem mapovací funkce pro více klíčů stejné místo, jsou později přidané prvky umístěny do nejbližších volných míst (nebo existuje seznam synonym, druhá mapovací funkce…).\n\n\n----\n\n== Vyhledávání v textu ==\n\n===== Knuth-Morris-Prattův algoritmus =====\n\nVyužívá konečný automat (s uzly START, STOP, READ a hranami ANO a NE). \nJe třeba sestavit FAIL vektor, který udává pro každý znak, kam se vrátit v případě neúspěchu. Časová složitost lineární, maximální omikron(n+m).\n\n[[Soubor:Knuth-Morris-Prat_ABABCB.jpg]]\n\n===== Boyer-Mooreův algoritmus =====\n\nVychází z předpokladu, že znaky, které nelze porovnat, může přeskočit (čím více znaků, tím více skáče).\n\n[[Soubor:Boyer_moor.png]]\n\nHeuristiky:\n\n1 – Porovnává se odzadu, když se nerovná poslední písmeno a není ani součástí hledaného řetězce, můžeme přeskočit všechny znaky nalevo od tohoto místa. Pokud písmeno je součástí hledaného řetězce, nasune se tak, aby odpovídající písmena byla v zákrytu, a porovná se zbytek řetězce.\n \n2 – Používá se v případě, že se některé posloupnosti písmen vyskytují ve hledaném řetězci víckrát, pak může skákat nejen ze znaku na znak, ale i mezi těmito posloupnostmi.\n\n\n----\n\n= Řazení =\n\n\'\'\'Třídění\'\'\' (sorting) – rozděluje prvky do skupin prvků se shodnými vlastnostmi\n\n\'\'\'Řazení\'\'\' (ordering) – uspořádání položek dané lineární homogenní datové struktury do sekvence podle relace uspořádání nad zadanou vlastností položek\n\n\n----\n\n=== Klasifikace metod řazení ===\n\n===== Podle přístupu k paměti =====\n\n\'\'\'Vnitřní řazení\'\'\' – přímý (náhodný) přístup – všechna řazená data jsou v operační paměti\n\n\'\'\'Vnější řazení\'\'\' – sekvenční přístup, řazení souborů a seznamů – data jsou na pevném disku\n\n\n===== Podle typu procesoru =====\n\n\'\'\'Sériové\'\'\' – pracuje jeden procesor, jedna operace v daném okamžiku\n\n\'\'\'Paralelní\'\'\' – více procesorů, více souběžných operací\n\n\n===== Podle principu řazení =====\n\n\'\'\'Výběr\'\'\' (selection) – vybere maximum/minimum a přesune do seřazené výstupní posloupnosti\n\n\'\'\'Vkládání\'\'\' (insertion) – vkládá prvky na své místo do seřazené výstupní posloupnosti\n\n\'\'\'Rozdělování\'\'\' (partition) – rozděluje prvky na podmnožiny, prvky jedné jsou menší než druhé\n\n\'\'\'Slučování\'\'\' (merging) – spojuje postupně více seřazených podmnožin do jedné\n\n\n----\n\n== Algoritmy řazení ==\n\n[http://www.ulozto.cz/x2i8GfP/sort-exe Stáhnout program s algoritmy]\n[http://www.ulozto.cz/xjPJcmd/sort-zdrojak-form1-cs Stáhnout zdrojový kód]\n\n[[https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-prn2/965966_10201037225353372_668202693_o.jpg]] přehled z FB. \'\'Edited by Suave\'\'\n\n===== Vlastnosti algoritmů =====\n\n\'\'\'Stabilita\'\'\' – zachovává relativní pořadí položek (nepřehodí dva stejné prvky)\n\n\'\'\'Přirozenost\'\'\' – doba řazení seřazeného pole < doba řazení náhodně uspořádaného pole < doba řazení opačně seřazeného pole\n\n\'\'\'Časová složitost algoritmů\'\'\'\n\nOmikron - honí hranice, maximální rychlost růstu funkce <m>O</m>\n\nOmega - dolní hranice, minimální rychlost růstu funkce <m>Omega</m>\n\nTheta - oznažuje třídu časového chování algoritmu <m> Theta </m>\n\nTheta(1) – konstantní\n\nTheta(log(n)) – logaritmická (rychlé vyhledávací algoritmy)\n\nTheta(n) – lineární (běžné vyhledávací a sekvenčně zpracovávající algoritmy)\n\nTheta(n*log(n) – linearitmická (rychlé řadící algoritmy)\n\nTheta(n*n) – kvadratická (klasické řadící algoritmy)\n\nTheta(n*n*n) - kubická (tyto algoritmy jsou použitelné jen pro málo rozsáhlé problémy)\n\nTheta(k^n) – exponenciální (algoritmy pracující s hrubou silou)\n\n\n----\n\n===== SelectSort (Selection Sort) =====\n\n\'\'\'Popis\'\'\': Najde nejmenší prvek neseřazené části a vloží ho na konec seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 0; i < array.Length; i++) // v kazdem pruchodu\n {\n int min_index = i;\n int min = array[i];\n for (int j = i + 1; j < array.Length; j++)\n { // v neserazenych cislech hledej minimum\n if (array[j] < min) // najdi prvek mensi nez minimum\n {\n min = array[j]; // prepis minimum\n min_index = j; // prepis index minima\n }\n }\n array[min_index] = array[i]; // uvolni misto pro cislo\n array[i] = min; // vloz cislo na konec serazene casti\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/220px-Selection_sort_animation.gif Animace SelectSortu]\n\n\'\'\'Vlastnosti\'\'\': Nestabilní, přirozená, kvadratická časová složitost, jednoduchá.\n\n\n----\n\n==== InsertSort (Insertion Sort) ====\n\n\'\'\'Popis\'\'\': Vezme prvek ze začátku neseřazené části a vloží ho na jeho místo do seřazené části.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n for (int i = 1; i < array.Length; i++)\n {\n int tmp = array[i]; // ulozi prvni prvek\n int j = i; // hledani indexu zacina na i a pokracuje doleva\n while (j > 0 && (tmp < array[j - 1]))\n { // nalezne spravne misto pro prvek\n array[j] = array[j - 1];\n j--;\n }\n array[j] = tmp; // vlozi prvek na misto\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/2/25/Insertion_sort_animation.gif Animace InsertSortu] \n\n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost.\n\n\n----\n\n==== BubbleSort ====\n\n\'\'\'Popis\'\'\': Porovnává sousedící dvojice prvků a v případě jejich obráceného uspořádání je prohodí.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n bool done = false;\n while (!done) // dokud nebude hotovo\n {\n done = true; // (zmeni se pozdeji, pokud budeme prohazovat)\n for (int i = 0; i < array.Length - 1; i++) // v kazdem pruchodu\n if (array[i] > array[i + 1]) // cisla nemaji spravne poradi\n { // prohodime hodnoty\n int tmp = array[i];\n array[i] = array[i + 1];\n array[i + 1] = tmp;\n done = false; // prohodila se cisla, proto neni hotovo\n }\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/c/c8/Bubble-sort-example-300px.gif Animace BubbleSortu]\n \n\'\'\'Vlastnosti\'\'\': Stabilní, přirozená, kvadratická časová složitost, používaná pro vícenásobné řazení dle více klíčů, nejméně efektivní.\n\n\'\'\'Další verze\'\'\': RippleSort (Pamatuje si polohu první výměny, na začátku průchodu skočí rovnou za to místo.), ShakerSort (Střídá směr probublávání zleva a zprava, končí uprostřed.), ShuttleSort (Každý další prvek je rovnou probublán na svoje místo – na seřazení stačí jeden průchod, končí přehozením dvou posledních.)\n\n\n----\n\n==== HeapSort ====\n\n\'\'\'Popis\'\'\': Použije se struktura stromového typu, u níž pro všechny uzly platí, že mezi otcovským uzlem a všemi jeho synovskými uzly je stejná relace uspořádání (otec je větší než všichni synové). Pokud je otec na indexu i, pak je levý syn na 2i a pravý na 2i+1.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n //////// ---------- cast kodu v main \n int[] array = promenne.pole;\n promenne.pocet_vypisu = 1;\n\n // cele pole prehazi, aby odpovidalo strukture haldy\n for (int i = (array.Length / 2) - 1; i >= 0; i--)\n siftDown(i, array.Length - 1);\n\n for (int i = array.Length - 1; i >= 1; i--)\n { // prochazi pole z prava, cislo prohodi s prvnim cislem pole\n int temp = array[0];\n array[0] = array[i];\n array[i] = temp;\n siftDown(0, i - 1); // opravi strukturu haldy\n }\n //////// ----------\n public void siftDown(int root, int bottom)\n { // opravi strukturu haldy\n int[] array = promenne.pole;\n bool done = false;\n\n while ((root * 2 <= bottom) && (!done))\n { // dokud se nedostane na konec spravovane casti a neni hotovo\n int maxChild = root * 2; // ulozi index prvniho ditete\n if (root * 2 < bottom && (array[root * 2] <= array[root * 2 + 1]))\n maxChild++; // ulozi index druheho ditete\n\n if (array[root] < array[maxChild]) // nejvetsi dite vetsi nez otec\n { // prohozeni ditete a otce, dite se stava otcem\n int temp = array[root];\n array[root] = array[maxChild];\n array[maxChild] = temp;\n root = maxChild;\n }\n else done = true;\n }\n }\n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/1/1b/Sorting_heapsort_anim.gif Animace HeapSortu]\n\n[http://upload.wikimedia.org/wikipedia/commons/4/4d/Heapsort-example.gif Animace stavění haldy] \n\n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost.\n\n\n----\n\n==== QuickSort ====\n\n\'\'\'Popis\'\'\': Určí se medián (častěji prvek uprostřed pole), vyhledá se nalevo od něj prvek, co patří doprava a napravo ten, co patří doleva a přehodí se, postup se opakuje rekurzivně pro nově vzniklé části pole.\n\n\'\'\'Postup\'\'\':\n\n <nowiki>\n QuickSort(0, array.Length - 1); // volani funkce v main\n //////// ----------\n private void QuickSort(int l, int r)\n {\n int i = l; // tento index pujde zleva doprava\n int j = r; // tento index pujde zprava doleva\n double x = array[(l + r) / 2]; // spocita cislo ve prostred\n do\n { // pro vsechna cisla ve zpracovavane casti\n while (array[i] < x) i++; // najde cislo nalevo od stredu\n while (x < array[j]) j--; // najde cislo napravo od stredu\n if (i <= j)\n { // prohodi cisla\n int tmp = array[i];\n array[i] = array[j];\n array[j] = tmp;\n i++;\n j--;\n }\n } while (i < j); // skonci, kdyz se levy a pravy index potkaji\n if (l < j) QuickSort(l, j); // zavola se znova na levou cast\n if (i < r) QuickSort(i, r); // zavola se znova na pravou cast\n } \n </nowiki>\n\n[http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif Animace QuickSortu]\n \n\'\'\'Vlastnosti\'\'\': Nestabilní, nepřirozená, linearitmická časová složitost, nerekurzivní vyžaduje zásobník.\n\n\n----\n\n==== ShellSort ====\n\n\'\'\'Popis\'\'\': Vyměňuje prvky vzdálené o stejný krok – začne velkými mezerami (například prvek 1 a 11, 2 a 12, 3 a 13… případně prvky prohodí), pokračuje menšími (například prvky s indexy 1, 4, 8, 12, 16 a 2, 5, 9, 13… nejdříve pro každou skupinu provede porovnání a případné prohození prvního a druhého prvku, potom druhého a třetího… až je každá skupina seřazena), mezery mezi prvky zmenšuje a v momentě, kdy je mezera 1, změní se na SelectSort a řazení dokončí.\n \n\'\'\'Postup\'\'\':\n\n <nowiki>